62
62
#include "cairo-dock-keyfile-utilities.h"
63
63
#include "cairo-dock-backends-manager.h"
64
64
#include "cairo-dock-X-manager.h"
65
#include "cairo-dock-user-interaction.h" // set_custom_icon_on_appli
65
66
#include "cairo-dock-menu.h"
67
68
#define CAIRO_DOCK_CONF_PANEL_WIDTH 1000
319
320
gboolean cairo_dock_notification_build_container_menu (gpointer *pUserData, Icon *icon, CairoContainer *pContainer, GtkWidget *menu, gboolean *bDiscardMenu)
321
//\_________________________ On ajoute le sous-menu Cairo-Dock, toujours present.
322
if (CAIRO_DOCK_IS_DOCK (pContainer) && CAIRO_DOCK (pContainer)->iRefCount > 0) // pas sur les sous-docks
323
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
325
//\_________________________ On ajoute le sous-menu Cairo-Dock.
322
326
GtkWidget *pMenuItem, *image;
323
327
GdkPixbuf *pixbuf;
324
328
pMenuItem = gtk_image_menu_item_new_with_label ("Cairo-Dock");
327
331
g_object_unref (pixbuf);
328
332
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (pMenuItem), image);
329
333
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
331
335
GtkWidget *pSubMenu = gtk_menu_new ();
332
336
gtk_menu_item_set_submenu (GTK_MENU_ITEM (pMenuItem), pSubMenu);
334
338
if (! cairo_dock_is_locked ())
336
340
if (CAIRO_DOCK_IS_DOCK (pContainer) && ! CAIRO_DOCK (pContainer)->bIsMainDock && CAIRO_DOCK (pContainer)->iRefCount == 0)
351
355
gtk_widget_set_tooltip_text (pMenuItem, _("Configure behaviour, appearance, and applets."));
353
pMenuItem = cairo_dock_add_in_menu_with_stock_and_data (_("Manage themes"),
357
pMenuItem = cairo_dock_add_in_menu_with_stock_and_data (_("Manage themes"),
354
358
CAIRO_DOCK_SHARE_DATA_DIR"/icon-appearance.svg",
355
359
(GFunc)_cairo_dock_initiate_theme_management,
679
684
if (CAIRO_DOCK_IS_APPLI (icon))
680
685
cairo_dock_close_xwindow (icon->Xid);
687
static void _show_image_preview (GtkFileChooser *pFileChooser, GtkImage *pPreviewImage)
689
gchar *cFileName = gtk_file_chooser_get_preview_filename (pFileChooser);
690
if (cFileName == NULL)
692
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size (cFileName, 64, 64, NULL);
696
gtk_image_set_from_pixbuf (pPreviewImage, pixbuf);
697
gdk_pixbuf_unref (pixbuf);
698
gtk_file_chooser_set_preview_widget_active (pFileChooser, TRUE);
701
gtk_file_chooser_set_preview_widget_active (pFileChooser, FALSE);
703
static void _cairo_dock_set_custom_appli_icon (GtkMenuItem *pMenuItem, gpointer *data)
705
Icon *icon = data[0];
706
CairoDock *pDock = data[1];
707
if (! CAIRO_DOCK_IS_APPLI (icon))
710
GtkWidget* pFileChooserDialog = gtk_file_chooser_dialog_new (
712
GTK_WINDOW (pDock->container.pWidget),
713
GTK_FILE_CHOOSER_ACTION_OPEN,
719
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (pFileChooserDialog), "~/.config/cairo-dock/current_theme/icons");
720
gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (pFileChooserDialog), FALSE);
722
GtkWidget *pPreviewImage = gtk_image_new ();
723
gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (pFileChooserDialog), pPreviewImage);
724
g_signal_connect (GTK_FILE_CHOOSER (pFileChooserDialog), "update-preview", G_CALLBACK (_show_image_preview), pPreviewImage);
726
gtk_widget_show (pFileChooserDialog);
727
int answer = gtk_dialog_run (GTK_DIALOG (pFileChooserDialog));
728
if (answer == GTK_RESPONSE_OK)
730
gchar *cFilePath = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (pFileChooserDialog));
731
cairo_dock_set_custom_icon_on_appli (cFilePath, icon, CAIRO_CONTAINER (pDock));
734
gtk_widget_destroy (pFileChooserDialog);
682
736
static void _cairo_dock_remove_custom_appli_icon (GtkMenuItem *pMenuItem, gpointer *data)
684
738
Icon *icon = data[0];
1036
1090
g_string_printf (sDesktop, cLabel, i+1);
1038
1092
g_string_printf (sDesktop, cLabel, j*g_desktopGeometry.iNbViewportX+k+1);
1039
iDesktopCode = i * g_desktopGeometry.iNbViewportY * g_desktopGeometry.iNbViewportX + j * g_desktopGeometry.iNbViewportY + k;
1093
iDesktopCode = i * g_desktopGeometry.iNbViewportY * g_desktopGeometry.iNbViewportX + j * g_desktopGeometry.iNbViewportX + k;
1040
1094
user_data = &s_pDesktopData[4*iDesktopCode];
1041
1095
user_data[0] = data;
1042
1096
user_data[1] = GINT_TO_POINTER (i);
1082
1136
data[1] = pContainer;
1083
1137
data[2] = menu;
1084
1138
GtkWidget *pMenuItem, *image;
1140
gboolean bAddSeparator = ! (CAIRO_DOCK_IS_DOCK (pContainer) && CAIRO_DOCK (pContainer)->iRefCount > 0); // pas sur les sous-docks.
1086
1142
//\_________________________ Si pas d'icone dans un dock, on s'arrete la.
1087
1143
if (CAIRO_DOCK_IS_DOCK (pContainer) && (icon == NULL || CAIRO_DOCK_IS_AUTOMATIC_SEPARATOR (icon)))
1089
1145
if (! cairo_dock_is_locked ())
1091
_add_add_entry (menu, data, FALSE, TRUE);
1147
Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (CAIRO_DOCK (pContainer), NULL);
1148
if (CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pPointingIcon))
1149
_add_add_entry (menu, data, FALSE, TRUE);
1093
1151
return CAIRO_DOCK_LET_PASS_NOTIFICATION;
1104
1162
if (icon->cDesktopFileName != NULL && icon->cParentDockName != NULL) // possede un .desktop.
1106
pMenuItem = gtk_separator_menu_item_new ();
1107
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1166
pMenuItem = gtk_separator_menu_item_new ();
1167
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1169
bAddSeparator = TRUE;
1109
1171
_add_entry_in_menu (CAIRO_DOCK_IS_USER_SEPARATOR (icon) ? _("Modify this separator") : _("Modify this launcher"), GTK_STOCK_EDIT, _cairo_dock_modify_launcher, menu);
1111
1173
pMenuItem = _add_entry_in_menu (CAIRO_DOCK_IS_USER_SEPARATOR (icon) ? _("Remove this separator") : _("Remove this launcher"), GTK_STOCK_REMOVE, _cairo_dock_remove_launcher, menu);
1125
1187
//\_________________________ On rajoute les actions sur les applis.
1126
1188
if (CAIRO_DOCK_IS_APPLI (icon))
1128
pMenuItem = gtk_separator_menu_item_new ();
1129
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1192
pMenuItem = gtk_separator_menu_item_new ();
1193
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1195
bAddSeparator = TRUE;
1131
1197
//\_________________________ On rajoute les actions supplementaires sur les icones d'applis.
1132
1198
pMenuItem = gtk_menu_item_new_with_label (_("Other actions"));
1157
1223
_add_desktops_entry (pSubMenuOtherActions, FALSE, data);
1159
if (myTaskBar.bOverWriteXIcons)
1225
if (CAIRO_DOCK_ICON_TYPE_IS_APPLI (icon))
1161
gchar *cCustomIcon = g_strdup_printf ("%s/%s.png", g_cCurrentIconsPath, icon->cClass);
1162
if (!g_file_test (cCustomIcon, G_FILE_TEST_EXISTS))
1227
if (myTaskBar.bOverWriteXIcons)
1164
g_free (cCustomIcon);
1165
cCustomIcon = g_strdup_printf ("%s/%s.svg", g_cCurrentIconsPath, icon->cClass);
1229
gchar *cCustomIcon = g_strdup_printf ("%s/%s.png", g_cCurrentIconsPath, icon->cClass);
1166
1230
if (!g_file_test (cCustomIcon, G_FILE_TEST_EXISTS))
1168
1232
g_free (cCustomIcon);
1172
if (cCustomIcon != NULL)
1174
_add_entry_in_menu (_("Remove custom icon"), GTK_STOCK_REMOVE, _cairo_dock_remove_custom_appli_icon, pSubMenuOtherActions);
1233
cCustomIcon = g_strdup_printf ("%s/%s.svg", g_cCurrentIconsPath, icon->cClass);
1234
if (!g_file_test (cCustomIcon, G_FILE_TEST_EXISTS))
1236
g_free (cCustomIcon);
1240
if (cCustomIcon != NULL)
1242
_add_entry_in_menu (_("Remove custom icon"), GTK_STOCK_REMOVE, _cairo_dock_remove_custom_appli_icon, pSubMenuOtherActions);
1246
_add_entry_in_menu (_("Set a custom icon"), GTK_STOCK_SELECT_COLOR, _cairo_dock_set_custom_appli_icon, pSubMenuOtherActions);
1178
1249
_add_entry_in_menu (_("Kill"), GTK_STOCK_CANCEL, _cairo_dock_kill_appli, pSubMenuOtherActions);
1200
1271
else if (CAIRO_DOCK_IS_MULTI_APPLI (icon))
1202
pMenuItem = gtk_separator_menu_item_new ();
1203
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1275
pMenuItem = gtk_separator_menu_item_new ();
1276
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1278
bAddSeparator = TRUE;
1205
1280
//\_________________________ On rajoute les actions supplementaires sur la classe.
1206
1281
pMenuItem = gtk_menu_item_new_with_label (_("Other actions"));
1238
1313
//\_________________________ On rajoute les actions propres a un module.
1239
1314
if (! cairo_dock_is_locked () && CAIRO_DOCK_IS_APPLET (pIconModule))
1241
pMenuItem = gtk_separator_menu_item_new ();
1242
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1318
pMenuItem = gtk_separator_menu_item_new ();
1319
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1321
bAddSeparator = TRUE;
1244
1323
_add_entry_in_menu (_("Configure this applet"), GTK_STOCK_PROPERTIES, _cairo_dock_initiate_config_module, menu);
1271
1350
//\_________________________ On rajoute les actions de positionnement d'un desklet.
1272
1351
if (! cairo_dock_is_locked () && CAIRO_DOCK_IS_DESKLET (pContainer))
1274
pMenuItem = gtk_separator_menu_item_new ();
1275
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1355
pMenuItem = gtk_separator_menu_item_new ();
1356
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);
1358
bAddSeparator = TRUE;
1277
1360
pMenuItem = gtk_menu_item_new_with_label (_("Visibility"));
1278
1361
gtk_menu_shell_append (GTK_MENU_SHELL (menu), pMenuItem);