25
25
#include "applet-struct.h"
26
26
#include "applet-bookmarks.h"
27
27
#include "applet-disk-usage.h"
28
#include "applet-drives.h"
28
29
#include "applet-load-icons.h"
31
static void cd_shortcuts_on_change_drives (CairoDockFMEventType iEventType, const gchar *cURI, CairoDockModuleInstance *myApplet)
32
void cd_shortcuts_set_icon_order_by_name (Icon *pNewIcon, GList *pIconsList)
34
//\________________ On gere l'evenement sur le point de montage.
35
cd_shortcuts_stop_disk_periodic_task (myApplet);
37
cairo_dock_fm_manage_event_on_file (iEventType, cURI, myIcon, 6);
39
cd_shortcuts_launch_disk_periodic_task (myApplet);
41
//\________________ On met a jour les signets qui pointeraient sur un repertoire du point de montage nouvellement (de)monte.
42
if (!myConfig.bListBookmarks)
47
if (! myIcon->pSubDock && (!myDesklet || !myDesklet->icons))
55
gchar *cTargetURI = cairo_dock_fm_is_mounted (cURI, &bIsMounted);
56
if (cTargetURI == NULL) // version bourrinne.
58
cd_shortcuts_on_change_bookmarks (CAIRO_DOCK_FILE_MODIFIED, NULL, myApplet); // NULL <=> on recharge tout.
60
else // version optimisee.
62
for (ic = (myDock ? myIcon->pSubDock->icons : myDesklet->icons); ic != NULL; ic = ic->next)
36
for (ic = pIconsList; ic != NULL; ic = ic->next)
39
if (pIcon->iType == pNewIcon->iType)
50
if (cairo_dock_compare_icons_name (pNewIcon, pIcon) <= 0)
52
pNewIcon->fOrder = pIcon->fOrder - 1;
53
g_print ("name : %s <= %s -> %.2f\n", pNewIcon->cName, pIcon->cName, pNewIcon->fOrder);
58
for (ic = ic0; ic != NULL; ic = ic->next)
61
if (pIcon->iType != pNewIcon->iType)
63
if (cairo_dock_compare_icons_name (pNewIcon, pIcon) < 0)
65
if (icon->iType == 10)
66
pNewIcon->fOrder = pIcon->fOrder - 1;
67
if (strncmp (cTargetURI, icon->cBaseURI, strlen (cTargetURI)) == 0)
69
cd_message ("le signet %s est situe sur un point de montage ayant change (%s)", icon->cBaseURI, cTargetURI);
70
gchar *cName = NULL, *cRealURI = NULL, *cIconName = NULL, *cUserName = NULL;
72
gboolean bIsDirectory = FALSE;
74
if (cairo_dock_fm_get_file_info (icon->cBaseURI, &cName, &cRealURI, &cIconName, &bIsDirectory, &iVolumeID, &fOrder, mySystem.iFileSortType))
76
g_print (" -> %s (%d)\n", cIconName, bIsMounted);
78
if (bIsMounted || cIconName == NULL)
82
icon->cName = g_strdup_printf ("%s\n[%s]", cName, D_("Unmounted"));
85
g_free (icon->cCommand);
86
icon->cCommand = cRealURI;
87
g_free (icon->cFileName);
88
icon->cFileName = cIconName;
89
icon->iVolumeID = iVolumeID;
90
cairo_dock_load_one_icon_from_scratch (icon, (myDock ? CAIRO_CONTAINER (myIcon->pSubDock) : myContainer));
69
Icon *pPrevIcon = ic->prev->data;
70
pNewIcon->fOrder = (pIcon->fOrder + pPrevIcon->fOrder) / 2;
72
g_print (" name : %s < %s -> %.2f\n", pNewIcon->cName, pIcon->cName, pNewIcon->fOrder);
75
pNewIcon->fOrder = pIcon->fOrder + 1;
99
static void cd_shortcuts_on_change_network (CairoDockFMEventType iEventType, const gchar *cURI, CairoDockModuleInstance *myApplet)
80
static void _cd_shortcuts_on_network_event (CairoDockFMEventType iEventType, const gchar *cURI, CairoDockModuleInstance *myApplet)
102
cairo_dock_fm_manage_event_on_file (iEventType, cURI, myIcon, 8);
84
g_print (" * event %d on network '%s'\n", iEventType, cURI);
85
GList *pIconsList = CD_APPLET_MY_ICONS_LIST;
86
CairoContainer *pContainer = CD_APPLET_MY_ICONS_LIST_CONTAINER;
87
CD_APPLET_LEAVE_IF_FAIL (pContainer != NULL);
91
case CAIRO_DOCK_FILE_DELETED : // un reseau a ete deconnecte.
93
Icon *pConcernedIcon = cairo_dock_get_icon_with_base_uri (pIconsList, cURI);
94
if (pConcernedIcon == NULL) // on cherche par nom.
96
pConcernedIcon = cairo_dock_get_icon_with_name (pIconsList, cURI);
98
if (pConcernedIcon == NULL)
100
cd_warning (" an unknown network was removed");
103
g_print (" %s will be removed\n", pConcernedIcon->cName);
105
CD_APPLET_REMOVE_ICON_FROM_MY_ICONS_LIST (pConcernedIcon);
109
case CAIRO_DOCK_FILE_CREATED : // un reseau a ete connecte.
111
//\_______________________ on verifie qu'elle n'existe pas deja.
112
Icon *pSameIcon = cairo_dock_get_icon_with_base_uri (pIconsList, cURI);
113
if (pSameIcon != NULL)
115
cd_warning ("this mount point (%s) already exists.", pSameIcon->cName);
116
return; // on decide de ne rien faire, c'est surement un signal inutile.
119
//\_______________________ on cree une icone pour cette nouvelle URI.
120
Icon *pNewIcon = cairo_dock_fm_create_icon_from_URI (cURI, pContainer, CAIRO_DOCK_FM_SORT_BY_NAME);
121
if (pNewIcon == NULL)
123
cd_warning ("couldn't create an icon for this network");
126
pNewIcon->iType = CD_NETWORK_GROUP;
128
//\_______________________ on la place au bon endroit suivant son nom.
129
cd_shortcuts_set_icon_order_by_name (pNewIcon, pIconsList);
130
g_print (" new network : %s, order = %.2f\n", pNewIcon->cName, pNewIcon->fOrder);
132
//\_______________________ on l'insere dans la liste.
133
CD_APPLET_ADD_ICON_IN_MY_ICONS_LIST (pNewIcon);
135
//\_______________________ on affiche un message.
136
cairo_dock_show_temporary_dialog_with_icon_printf (
137
D_("%s has been connected"),
138
pNewIcon, pContainer,
140
NULL, // son icone n'est pas encore chargee
144
case CAIRO_DOCK_FILE_MODIFIED : // un point de montage a ete (de)monte
146
//\_______________________ on cherche l'icone concernee.
147
Icon *pConcernedIcon = cairo_dock_get_icon_with_base_uri (pIconsList, cURI);
148
if (pConcernedIcon == NULL) // on cherche par nom.
150
pConcernedIcon = cairo_dock_get_icon_with_name (pIconsList, cURI);
152
if (pConcernedIcon == NULL)
154
cd_warning (" an unknown network was modified");
157
g_print (" %s is modified\n", pConcernedIcon->cName);
159
//\_______________________ on recupere les infos actuelles.
160
Icon *pNewIcon = cairo_dock_fm_create_icon_from_URI (cURI, pContainer, CAIRO_DOCK_FM_SORT_BY_NAME);
161
if (pNewIcon == NULL)
163
cd_warning ("couldn't create an icon for this network");
166
pNewIcon->iType = CD_NETWORK_GROUP;
168
//\_______________________ on remplace l'icone si des choses ont change.
169
if (cairo_dock_strings_differ (pConcernedIcon->cName, pNewIcon->cName) || cairo_dock_strings_differ (pConcernedIcon->cFileName, pNewIcon->cFileName))
171
g_print (" '%s' -> '%s'\n'%s' -> '%s'\n", pConcernedIcon->cName, pNewIcon->cName, pConcernedIcon->cFileName, pNewIcon->cFileName);
173
CD_APPLET_REMOVE_ICON_FROM_MY_ICONS_LIST (pConcernedIcon);
175
cd_shortcuts_set_icon_order_by_name (pNewIcon, pIconsList);
176
CD_APPLET_ADD_ICON_IN_MY_ICONS_LIST (pNewIcon);
180
cairo_dock_free_icon (pNewIcon);
103
184
CD_APPLET_LEAVE();
112
193
if (myConfig.bListDrives)
114
pIconList = cairo_dock_fm_list_directory (CAIRO_DOCK_FM_VFS_ROOT, CAIRO_DOCK_FM_SORT_BY_NAME, 6, FALSE, &cFullURI);
115
cd_message (" cFullURI : %s", cFullURI);
116
if (pIconList == NULL)
118
cd_warning ("couldn't detect any drives"); // on decide de poursuivre malgre tout, pour les signets.
121
if (! cairo_dock_fm_add_monitor_full (cFullURI, TRUE, NULL, (CairoDockFMMonitorCallback) cd_shortcuts_on_change_drives, myApplet))
122
cd_warning ("Shortcuts : can't monitor drives");
123
myData.cDisksURI = cFullURI;
195
pIconList = cd_shortcuts_list_drives (myApplet);
126
198
if (myConfig.bListNetwork)
128
GList *pIconList2 = cairo_dock_fm_list_directory (CAIRO_DOCK_FM_NETWORK, CAIRO_DOCK_FM_SORT_BY_NAME, 8, FALSE, &cFullURI);
200
GList *pIconList2 = cairo_dock_fm_list_directory (CAIRO_DOCK_FM_NETWORK, CAIRO_DOCK_FM_SORT_BY_NAME, CD_NETWORK_GROUP, FALSE, 100, &cFullURI);
129
201
cd_message (" cFullURI : %s", cFullURI);
131
if (myConfig.bUseSeparator && pIconList2 != NULL && pIconList != NULL)
203
/**if (myConfig.bUseSeparator && myDock && pIconList2 != NULL && pIconList != NULL)
133
Icon *pSeparatorIcon = g_new0 (Icon, 1);
134
pSeparatorIcon->iType = 7;
205
Icon *pSeparatorIcon = cairo_dock_create_separator_icon (7, NULL); // NULL => ne charge pas l'icone, car on est dans un thread.
135
206
pIconList = g_list_append (pIconList, pSeparatorIcon);
138
209
pIconList = g_list_concat (pIconList, pIconList2);
140
if (! cairo_dock_fm_add_monitor_full (cFullURI, TRUE, NULL, (CairoDockFMMonitorCallback) cd_shortcuts_on_change_network, myApplet))
211
if (! cairo_dock_fm_add_monitor_full (cFullURI, TRUE, NULL, (CairoDockFMMonitorCallback) _cd_shortcuts_on_network_event, myApplet))
141
212
cd_warning ("Shortcuts : can't monitor network");
142
213
myData.cNetworkURI = cFullURI;