177
178
CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Open (click)"), GTK_STOCK_EXECUTE, _cd_stack_open_item, CD_APPLET_MY_MENU, data);
178
if (CD_APPLET_CLICKED_ICON->iVolumeID == 1)
179
gchar *cContent = CD_APPLET_CLICKED_ICON->cCommand;
180
if (strncmp (cContent, "file://", 7) == 0)
179
181
CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Open parent folder"), GTK_STOCK_OPEN, _cd_stack_open_item_folder, CD_APPLET_MY_MENU, data);
180
182
CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
181
CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Copy (middle click)"), GTK_STOCK_COPY, _cd_stack_copy_content, CD_APPLET_MY_MENU, data);
183
gchar *cLabel = g_strdup_printf ("%s (%s)", D_("Copy"), D_("middle-click"));
184
CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (cLabel, GTK_STOCK_COPY, _cd_stack_copy_content, CD_APPLET_MY_MENU, data);
182
186
CD_APPLET_ADD_IN_MENU_WITH_STOCK_AND_DATA (D_("Cut"), GTK_STOCK_CUT, _cd_stack_cut_item, CD_APPLET_MY_MENU, data);
184
188
CD_APPLET_ADD_SEPARATOR_IN_MENU (CD_APPLET_MY_MENU);
204
208
_cd_stack_copy_content (NULL, data);
206
210
CD_APPLET_ON_MIDDLE_CLICK_END
213
gboolean cd_stack_on_drop_data (gpointer data, const gchar *cReceivedData, Icon *icon, double fOrder, CairoContainer *pContainer)
215
//g_print ("Stack received '%s'\n", cReceivedData);
217
// if we dropped on an icon, let pass the notif to it.
218
if (fOrder == CAIRO_DOCK_LAST_ORDER) // drop on an icon.
219
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
221
// if it's a .desktop, let pass to the core (it will create the associated launcher).
222
if (g_str_has_suffix (cReceivedData, ".desktop"))
223
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
225
// if it's not a file or an URL, let pass it.
227
if (strncmp (cReceivedData, "file://", 7) == 0) // it's a file.
229
cPath = g_filename_from_uri (cReceivedData, NULL, NULL);
230
if (!g_file_test (cPath, G_FILE_TEST_EXISTS)
231
|| g_file_test (cPath, G_FILE_TEST_IS_DIR)) // if the path doesn't exist, or is a folder, skip it (folders are handled by the 'Folders' applet).
234
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
237
else if (strncmp (cReceivedData, "http://", 7) != 0
238
&& strncmp (cReceivedData, "https://", 8) != 0) // it's neither a file nor an URL.
240
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
243
// grab the first instance of the Stack applet (launch it if necessary)
244
CairoDockModule *pModule = cairo_dock_find_module_from_name ("stack");
245
g_return_val_if_fail (pModule != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
247
if (pModule->pInstancesList == NULL) // no stack yet
249
cairo_dock_activate_module_and_load ("stack");
250
g_return_val_if_fail (pModule->pInstancesList != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
253
// add the item to the instance.
254
CairoDockModuleInstance *myApplet = pModule->pInstancesList->data;
255
cd_stack_create_and_load_item (myApplet, cReceivedData);
257
cairo_dock_show_temporary_dialog_with_icon (
259
D_("The file has been added to the stack."):
260
D_("The URL has been added to the stack."),
266
return CAIRO_DOCK_INTERCEPT_NOTIFICATION;