51
51
pDiskUsage->iTotal = 0;
52
pDiskUsage->iAvail = 0;
55
static void _cd_shortcuts_get_disk_usage (CairoDockModuleInstance *myApplet)
57
//cd_message ("%s ()", __func__);
58
const gchar *cMountPath;
59
GList *pElement = myData.pDiskUsageList;
60
CDDiskUsage *pDiskUsage;
61
long long iAvail, iFree, iTotal, iUsed, iType;
64
GList *pIconsList = CD_APPLET_MY_ICONS_LIST;
65
for (ic = pIconsList; ic != NULL; ic = ic->next)
68
//g_print ("%s (%s, %d)\n", __func__, pIcon->cCommand, pIcon->iType);
69
if (pIcon->iType != 6)
71
if (pIcon->cCommand != NULL)
75
pDiskUsage = pElement->data;
76
pElement = pElement->next;
80
//g_print ("+ %s\n", pIcon->cCommand);
81
pDiskUsage = g_new0 (CDDiskUsage, 1);
82
myData.pDiskUsageList = g_list_append (myData.pDiskUsageList, pDiskUsage);
85
_cd_shortcuts_get_fs_stat (pIcon->cCommand, pDiskUsage);
90
57
static gboolean _cd_shortcuts_update_disk_usage (CairoDockModuleInstance *myApplet)
92
g_return_val_if_fail (myData.pDiskUsageList != NULL, TRUE);
95
60
CairoContainer *pContainer = CD_APPLET_MY_ICONS_LIST_CONTAINER;
96
cairo_t *ctx = (0 ? myDrawContext : cairo_dock_create_context_from_container (pContainer));
97
GList *pElement = myData.pDiskUsageList;
98
61
CDDiskUsage *pDiskUsage;
103
66
for (ic = pIconsList; ic != NULL; ic = ic->next)
106
if (pIcon->iType != 6)
69
if (pIcon->iType != CD_DRIVE_GROUP) // les disques sont en 1er
108
if (pIcon->cCommand != NULL && pElement != NULL)
71
if (pIcon->cCommand != NULL)
110
pDiskUsage = pElement->data;
111
if (pDiskUsage->iPrevAvail != pDiskUsage->iAvail)
74
pDiskUsage = CD_APPLET_GET_MY_ICON_DATA (pIcon);
75
if (pDiskUsage == NULL)
77
cd_shortcuts_get_fs_stat (pIcon->cCommand, pDiskUsage);
80
if (pDiskUsage->iTotal != 0 && (pDiskUsage->iPrevAvail == 0 || (double)fabs (pDiskUsage->iPrevAvail - pDiskUsage->iAvail) / pDiskUsage->iTotal > .001)) // .1 % d'ecart ou info encore non renseignee (un disque n'est jamais totalement vide).
82
pDiskUsage->iPrevAvail = pDiskUsage->iAvail;
113
83
switch (myConfig.iDisplayType)
115
85
case CD_SHOW_FREE_SPACE :
116
86
fValue = (double) pDiskUsage->iAvail / pDiskUsage->iTotal;
117
cairo_dock_set_size_as_quick_info (ctx, pIcon, pContainer, pDiskUsage->iAvail);
87
cairo_dock_set_size_as_quick_info (pIcon, pContainer, pDiskUsage->iAvail);
119
89
case CD_SHOW_USED_SPACE :
120
90
fValue = (double) - pDiskUsage->iUsed / pDiskUsage->iTotal; // <0 => du vert au rouge.
121
cairo_dock_set_size_as_quick_info (ctx, pIcon, pContainer, pDiskUsage->iUsed);
91
cairo_dock_set_size_as_quick_info (pIcon, pContainer, pDiskUsage->iUsed);
123
93
case CD_SHOW_FREE_SPACE_PERCENT :
124
94
fValue = (double) pDiskUsage->iAvail / pDiskUsage->iTotal;
125
cairo_dock_set_quick_info_full (ctx, pIcon, pContainer, "%.1f%%", 100.*fValue);
95
cairo_dock_set_quick_info_printf (pIcon, pContainer, "%.1f%%", 100.*fValue);
127
97
case CD_SHOW_USED_SPACE_PERCENT :
128
98
fValue = (double) - pDiskUsage->iUsed / pDiskUsage->iTotal; // <0 => du vert au rouge.
129
cairo_dock_set_quick_info_full (ctx, pIcon, pContainer, "%.1f%%", -100.*fValue);
99
cairo_dock_set_quick_info_printf (pIcon, pContainer, "%.1f%%", -100.*fValue);
133
if (myConfig.bDrawBar)
106
if (myConfig.bDrawBar && pIcon->pIconBuffer != NULL)
135
108
int iWidth, iHeight;
136
109
cairo_dock_get_icon_extent (pIcon, pContainer, &iWidth, &iHeight);
137
cairo_surface_t *pSurface = cairo_dock_create_surface_for_icon (pIcon->cFileName, ctx, iWidth, iHeight);
110
cairo_surface_t *pSurface = cairo_dock_create_surface_for_icon (pIcon->cFileName, iWidth, iHeight);
138
111
cairo_t *pIconContext = cairo_create (pIcon->pIconBuffer);
140
cairo_dock_set_icon_surface_with_bar (pIconContext, pSurface, fValue, pIcon, pContainer);
113
cairo_dock_set_icon_surface_with_bar (pIconContext, pSurface, fValue, pIcon);
142
115
cairo_destroy (pIconContext);
143
116
cairo_surface_destroy (pSurface);
146
if (pDiskUsage->iPrevAvail != 0)
147
cairo_dock_redraw_icon (pIcon, pContainer);
119
cairo_dock_redraw_icon (pIcon, pContainer);
149
pElement = pElement->next;
152
if (ctx != myDrawContext)
155
CD_APPLET_LEAVE(TRUE);
125
cairo_dock_redraw_container (myContainer);
127
CD_APPLET_LEAVE (TRUE);