31
30
CD_APPLET_DEFINITION (N_("dustbin"),
33
CAIRO_DOCK_CATEGORY_DESKTOP,
32
CAIRO_DOCK_CATEGORY_APPLET_FILES,
34
33
N_("This applet manages the dustbin\n"
35
34
"You can threw files and unmount disks by drag andn droping them on the icon.\n"
36
35
"The applet can warn you if you use too much space\n"
37
36
"Middle-click to display usefull info about the dustbin."),
38
37
"Fabounet (Fabrice Rey)")
41
static void _load_theme (GError **erreur)
39
static void _get_theme (void)
43
//\_______________ On charge en priorite les images utilisateur.
44
41
if (myConfig.cEmptyUserImage != NULL)
46
gchar *cUserImagePath = cairo_dock_generate_file_path (myConfig.cEmptyUserImage);
47
myData.pEmptyBinSurface = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cUserImagePath);
48
g_free (cUserImagePath);
43
gchar *cPath = cairo_dock_search_icon_s_path (myConfig.cEmptyUserImage);
44
if (! g_file_test (cPath, G_FILE_TEST_EXISTS))
46
g_free (myConfig.cEmptyUserImage);
47
myConfig.cEmptyUserImage = NULL;
50
51
if (myConfig.cFullUserImage != NULL)
52
gchar *cUserImagePath = cairo_dock_generate_file_path (myConfig.cFullUserImage);
53
myData.pFullBinSurface = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cUserImagePath);
54
g_free (cUserImagePath);
57
//\_______________ On charge le theme si necessaire.
58
if (myConfig.cThemePath != NULL && (myData.pEmptyBinSurface == NULL || myData.pFullBinSurface == NULL))
60
GError *tmp_erreur = NULL;
61
GDir *dir = g_dir_open (myConfig.cThemePath, 0, &tmp_erreur);
62
if (tmp_erreur != NULL)
64
g_propagate_error (erreur, tmp_erreur);
68
const gchar *cElementName;
70
while ((cElementName = g_dir_read_name (dir)) != NULL)
72
cElementPath = g_strdup_printf ("%s/%s", myConfig.cThemePath, cElementName);
73
cd_message (" %s\n", cElementPath);
74
if (strncmp (cElementName, "trashcan_full", 13) == 0 && myConfig.cFullUserImage == NULL)
76
myData.cDialogIconPath = cElementPath;
77
myData.pFullBinSurface = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cElementPath);
81
if (strncmp (cElementName, "trashcan_empty", 14) == 0 && myData.pEmptyBinSurface == NULL)
82
myData.pEmptyBinSurface = CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET (cElementPath);
83
g_free (cElementPath);
88
if (myData.pFullBinSurface == NULL || myData.pFullBinSurface == NULL)
90
cd_warning ("dustbin : couldn't find images, check the existence of te files in %s", myConfig.cThemePath);
94
static void _cd_dusbin_start (CairoDockModuleInstance *myApplet)
96
//\_______________ On commence a surveiller les repertoires.
97
gboolean bMonitoringOK = FALSE;
98
gchar *cDustbinPath = cairo_dock_fm_get_trash_path (g_getenv ("HOME"), NULL);
99
if (cDustbinPath != NULL)
100
bMonitoringOK = cd_dustbin_add_one_dustbin (cDustbinPath, 0); // cDustbinPath ne nous appartient plus.
102
if (myConfig.cAdditionnalDirectoriesList != NULL)
105
while (myConfig.cAdditionnalDirectoriesList[i] != NULL)
107
if (*myConfig.cAdditionnalDirectoriesList[i] == '\0' || *myConfig.cAdditionnalDirectoriesList[i] == ' ')
109
cd_warning ("dustbin : this directory (%s) is not valid, be careful with it !", myConfig.cAdditionnalDirectoriesList[i]);
113
if (*myConfig.cAdditionnalDirectoriesList[i] == '~')
114
bMonitoringOK |= cd_dustbin_add_one_dustbin (g_strdup_printf ("%s%s", getenv ("HOME"), myConfig.cAdditionnalDirectoriesList[i]+1), 0);
116
bMonitoringOK |= cd_dustbin_add_one_dustbin (g_strdup (myConfig.cAdditionnalDirectoriesList[i]), 0);
119
cd_message (" %d dossier(s) poubelle", i);
121
cd_message (" %d dechet(s) actuellement (%d)", myData.iNbTrashes, bMonitoringOK);
123
//\_______________ On met l'icone qui va bien.
124
if (myData.iNbTrashes <= 0)
126
CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pEmptyBinSurface);
130
CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pFullBinSurface);
133
//\_______________ On lance le comptage de nos poubelles.
136
if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_FILES || myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT)
138
cd_dustbin_add_message (NULL, NULL);
142
cd_dustbin_draw_quick_info (FALSE);
145
else // methode par defaut.
147
gchar *cDustbinPath = cairo_dock_fm_get_trash_path (g_getenv ("HOME"), NULL);
148
if (cDustbinPath != NULL)
150
if (myConfig.cAdditionnalDirectoriesList != NULL)
151
g_strfreev (myConfig.cAdditionnalDirectoriesList);
152
myConfig.cAdditionnalDirectoriesList = g_new0 (gchar *, 2);
153
myConfig.cAdditionnalDirectoriesList[0] = cDustbinPath;
155
if (myConfig.cAdditionnalDirectoriesList != NULL)
157
cd_message ("***mode degrade");
158
cd_dustbin_check_trashes (myIcon);
159
myData.iSidCheckTrashes = g_timeout_add_seconds ((int) (myConfig.fCheckInterval), (GSourceFunc) cd_dustbin_check_trashes, (gpointer) myIcon);
53
gchar *cPath = cairo_dock_search_icon_s_path (myConfig.cFullUserImage);
54
if (! g_file_test (cPath, G_FILE_TEST_EXISTS))
56
g_free (myConfig.cFullUserImage);
57
myConfig.cFullUserImage = NULL;
61
if (myConfig.cThemePath != NULL)
63
if (myConfig.cEmptyUserImage == NULL)
65
myConfig.cEmptyUserImage = g_strdup_printf ("%s/%s", myConfig.cThemePath, "trashcan_empty.svg");
66
if (! g_file_test (myConfig.cEmptyUserImage, G_FILE_TEST_EXISTS))
68
g_free (myConfig.cEmptyUserImage);
69
myConfig.cEmptyUserImage = g_strdup_printf ("%s/%s", myConfig.cThemePath, "trashcan_empty.png");
70
if (! g_file_test (myConfig.cEmptyUserImage, G_FILE_TEST_EXISTS))
72
g_free (myConfig.cEmptyUserImage);
73
myConfig.cEmptyUserImage = NULL;
74
cd_warning ("dustbin : couldn't find an image for empty dustbin, check the existence of the files in %s", myConfig.cThemePath);
78
if (myConfig.cFullUserImage == NULL)
80
myConfig.cFullUserImage = g_strdup_printf ("%s/%s", myConfig.cThemePath, "trashcan_full.svg");
81
if (! g_file_test (myConfig.cFullUserImage, G_FILE_TEST_EXISTS))
83
g_free (myConfig.cFullUserImage);
84
myConfig.cFullUserImage = g_strdup_printf ("%s/%s", myConfig.cThemePath, "trashcan_full.png");
85
if (! g_file_test (myConfig.cFullUserImage, G_FILE_TEST_EXISTS))
87
g_free (myConfig.cFullUserImage);
88
myConfig.cFullUserImage = NULL;
89
cd_warning ("dustbin : couldn't find an image for full dustbin, check the existence of the files in %s", myConfig.cThemePath);
164
96
CD_APPLET_INIT_BEGIN
165
//\_______________ On charge le theme choisi.
168
99
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
171
GError *erreur = NULL;
172
_load_theme (&erreur);
175
cd_warning ("dustbin : %s", erreur->message);
176
g_error_free (erreur);
102
//\_______________ On recupere les images du theme choisi.
180
105
//\_______________ On enregistre nos notifications.
181
106
CD_APPLET_REGISTER_FOR_CLICK_EVENT;
196
123
CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT;
198
125
//\_______________ On stoppe la surveillance.
199
cd_dustbin_remove_all_dustbins ();
126
cd_dustbin_stop (myApplet);
201
if (myData.iSidCheckTrashes != 0)
203
g_source_remove (myData.iSidCheckTrashes);
204
myData.iSidCheckTrashes = 0;
206
128
CD_APPLET_STOP_END
209
131
CD_APPLET_RELOAD_BEGIN
210
//\_______________ On recharge notre theme.
213
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
216
if (myData.pEmptyBinSurface != NULL)
218
cairo_surface_destroy (myData.pEmptyBinSurface);
219
myData.pEmptyBinSurface = NULL;
221
if (myData.pFullBinSurface != NULL)
223
cairo_surface_destroy (myData.pFullBinSurface);
224
myData.pFullBinSurface = NULL;
226
GError *erreur = NULL;
227
_load_theme (&erreur);
230
cd_warning ("dustbin : %s", erreur->message);
231
g_error_free (erreur);
235
132
//\_______________ On recharge les donnees qui ont pu changer.
236
133
if (CD_APPLET_MY_CONFIG_CHANGED)
135
if (myDesklet && CD_APPLET_MY_CONTAINER_TYPE_CHANGED) // we are now in a desklet, set a renderer.
137
CD_APPLET_SET_DESKLET_RENDERER ("Simple");
238
140
//\_______________ On stoppe la surveillance.
239
cd_dustbin_remove_all_dustbins ();
241
if (myData.iSidCheckTrashes != 0)
243
g_source_remove (myData.iSidCheckTrashes);
244
myData.iSidCheckTrashes = 0;
141
cd_dustbin_stop (myApplet);
247
143
//\_______________ On la redemarre.
248
_cd_dusbin_start (myApplet);
252
if (myData.iSidCheckTrashes != 0)
253
myData.iNbTrashes = -1;
256
cd_dustbin_draw_quick_info (FALSE);
257
if (myData.iNbTrashes == 0)
259
CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pEmptyBinSurface);
263
CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pFullBinSurface);
145
cd_dustbin_start (myApplet);
147
CD_APPLET_SET_IMAGE_ON_MY_ICON (myData.bDisplayFullIcon ? myConfig.cFullUserImage: myConfig.cEmptyUserImage);
267
149
CD_APPLET_RELOAD_END