163
163
cd_warning ("couldn't create an icon for this network");
166
pNewIcon->iType = CD_NETWORK_GROUP;
166
pNewIcon->iGroup = CD_NETWORK_GROUP;
168
168
//\_______________________ on remplace l'icone si des choses ont change.
169
169
if (cairo_dock_strings_differ (pConcernedIcon->cName, pNewIcon->cName) || cairo_dock_strings_differ (pConcernedIcon->cFileName, pNewIcon->cFileName))
188
static GList * _load_icons (CairoDockModuleInstance *myApplet)
188
static inline GList * _load_icons (CDSharedMemory *pSharedMemory)
190
190
GList *pIconList = NULL;
191
gchar *cFullURI = NULL;
193
if (myConfig.bListDrives)
192
if (pSharedMemory->bListDrives)
195
pIconList = cd_shortcuts_list_drives (myApplet);
194
pIconList = cd_shortcuts_list_drives (pSharedMemory);
198
if (myConfig.bListNetwork)
197
if (pSharedMemory->bListNetwork)
199
gchar *cFullURI = NULL;
200
200
GList *pIconList2 = cairo_dock_fm_list_directory (CAIRO_DOCK_FM_NETWORK, CAIRO_DOCK_FM_SORT_BY_NAME, CD_NETWORK_GROUP, FALSE, 100, &cFullURI);
201
201
cd_message (" cFullURI : %s", cFullURI);
203
/**if (myConfig.bUseSeparator && myDock && pIconList2 != NULL && pIconList != NULL)
205
Icon *pSeparatorIcon = cairo_dock_create_separator_icon (7, NULL); // NULL => ne charge pas l'icone, car on est dans un thread.
206
pIconList = g_list_append (pIconList, pSeparatorIcon);
209
203
pIconList = g_list_concat (pIconList, pIconList2);
211
if (! cairo_dock_fm_add_monitor_full (cFullURI, TRUE, NULL, (CairoDockFMMonitorCallback) _cd_shortcuts_on_network_event, myApplet))
212
cd_warning ("Shortcuts : can't monitor network");
213
myData.cNetworkURI = cFullURI;
205
pSharedMemory->cNetworkURI = cFullURI;
216
if (myConfig.bListBookmarks)
208
if (pSharedMemory->bListBookmarks)
218
210
gchar *cBookmarkFilePath = g_strdup_printf ("%s/.gtk-bookmarks", g_getenv ("HOME"));
219
211
if (! g_file_test (cBookmarkFilePath, G_FILE_TEST_EXISTS)) // on le cree pour pouvoir ajouter des signets.
225
217
GList *pIconList2 = cd_shortcuts_list_bookmarks (cBookmarkFilePath);
227
/**if (myConfig.bUseSeparator && myDock && pIconList2 != NULL && pIconList != NULL)
229
Icon *pSeparatorIcon = cairo_dock_create_separator_icon (9, NULL); // NULL => ne charge pas l'icone, car on est dans un thread.
230
pIconList = g_list_append (pIconList, pSeparatorIcon);
233
219
pIconList = g_list_concat (pIconList, pIconList2);
235
if (! cairo_dock_fm_add_monitor_full (cBookmarkFilePath, FALSE, NULL, (CairoDockFMMonitorCallback) cd_shortcuts_on_bookmarks_event, myApplet))
236
cd_warning ("Shortcuts : can't monitor bookmarks");
238
myData.cBookmarksURI = cBookmarkFilePath;
221
pSharedMemory->cBookmarksURI = cBookmarkFilePath;
241
224
return pIconList;
245
void cd_shortcuts_get_shortcuts_data (CairoDockModuleInstance *myApplet)
226
static void cd_shortcuts_get_shortcuts_data (CDSharedMemory *pSharedMemory)
247
myData.pIconList = _load_icons (myApplet);
228
pSharedMemory->pIconList = _load_icons (pSharedMemory);
251
gboolean cd_shortcuts_build_shortcuts_from_data (CairoDockModuleInstance *myApplet)
231
static gboolean cd_shortcuts_build_shortcuts_from_data (CDSharedMemory *pSharedMemory)
233
CairoDockModuleInstance *myApplet = pSharedMemory->pApplet;
253
234
g_return_val_if_fail (myIcon != NULL, FALSE); // paranoia
237
//\_______________________ get the result of the thread.
238
GList *pIconList = pSharedMemory->pIconList;
239
pSharedMemory->pIconList = NULL;
240
myData.cDisksURI = pSharedMemory->cDisksURI;
241
pSharedMemory->cDisksURI = NULL;
242
myData.cNetworkURI = pSharedMemory->cNetworkURI;
243
pSharedMemory->cNetworkURI = NULL;
244
myData.cBookmarksURI = pSharedMemory->cBookmarksURI;
245
pSharedMemory->cBookmarksURI = NULL;
247
//\_______________________ monitor the sets.
248
if (myData.cDisksURI)
250
if (! cairo_dock_fm_add_monitor_full (myData.cDisksURI, TRUE, NULL, (CairoDockFMMonitorCallback) cd_shortcuts_on_drive_event, myApplet))
251
cd_warning ("Shortcuts : can't monitor drives");
253
if (myData.cNetworkURI)
255
if (! cairo_dock_fm_add_monitor_full (myData.cNetworkURI, TRUE, NULL, (CairoDockFMMonitorCallback) _cd_shortcuts_on_network_event, myApplet))
256
cd_warning ("Shortcuts : can't monitor network");
258
if (myData.cBookmarksURI)
260
if (! cairo_dock_fm_add_monitor_full (myData.cBookmarksURI, FALSE, NULL, (CairoDockFMMonitorCallback) cd_shortcuts_on_bookmarks_event, myApplet))
261
cd_warning ("Shortcuts : can't monitor bookmarks");
256
264
//\_______________________ On efface l'ancienne liste.
257
265
CD_APPLET_DELETE_MY_ICONS_LIST;
269
277
cDeskletRendererName = "Tree";
272
CD_APPLET_LOAD_MY_ICONS_LIST (myData.pIconList, myConfig.cRenderer, cDeskletRendererName, NULL);
273
myData.pIconList = NULL;
280
CD_APPLET_LOAD_MY_ICONS_LIST (pIconList, myConfig.cRenderer, cDeskletRendererName, NULL);
275
282
//\_______________________ On lance la tache de mesure des disques.
276
283
cd_shortcuts_launch_disk_periodic_task (myApplet);
285
cairo_dock_discard_task (myData.pTask);
278
288
CD_APPLET_LEAVE (TRUE);
291
static void _free_shared_memory (CDSharedMemory *pSharedMemory)
293
g_free (pSharedMemory->cDisksURI);
294
g_free (pSharedMemory->cNetworkURI);
295
g_free (pSharedMemory->cBookmarksURI);
296
g_list_foreach (pSharedMemory->pIconList, (GFunc)g_free, NULL);
297
g_list_free (pSharedMemory->pIconList);
298
g_free (pSharedMemory);
300
void cd_shortcuts_start (CairoDockModuleInstance *myApplet)
302
if (myData.pTask != NULL)
304
cairo_dock_discard_task (myData.pTask);
308
CDSharedMemory *pSharedMemory = g_new0 (CDSharedMemory, 1);
309
pSharedMemory->bListDrives = myConfig.bListDrives;
310
pSharedMemory->bListNetwork = myConfig.bListNetwork;
311
pSharedMemory->bListBookmarks = myConfig.bListBookmarks;
312
pSharedMemory->pApplet = myApplet;
314
myData.pTask = cairo_dock_new_task_full (0,
315
(CairoDockGetDataAsyncFunc) cd_shortcuts_get_shortcuts_data,
316
(CairoDockUpdateSyncFunc) cd_shortcuts_build_shortcuts_from_data,
317
(GFreeFunc) _free_shared_memory,
319
cairo_dock_launch_task (myData.pTask);