Репозитории ALT
S: | 4.18.1-alt1 |
5.1: | 4.6.1-alt3 |
4.1: | 4.4.3-alt0.M41.1 |
4.0: | 4.4.2-alt1.M40 |
3.0: | 4.2.2-alt1 |
Группа :: Графические оболочки/XFce
Пакет: xfdesktop
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: 02_show_context_menu.patch
Скачать
Скачать
diff -Nur xfdesktop-4.3.99.1/src/menu.c xfdesktop-4.3.99.1.new/src/menu.c
--- xfdesktop-4.3.99.1/src/menu.c 2006-10-23 12:51:26.000000000 +0300
+++ xfdesktop-4.3.99.1.new/src/menu.c 2006-10-23 14:12:42.000000000 +0300
@@ -72,6 +72,9 @@
}
#endif
+extern GtkWidget* common_desktop_menu(GdkScreen *gscreen);
+GtkWidget *cmenu_widget = NULL;
+
void
popup_desktop_menu(GdkScreen *gscreen, gint button, guint32 time)
{
@@ -79,9 +82,16 @@
GtkWidget *menu_widget;
GdkWindow *root;
- if(!desktop_menu)
- return;
-
+ if(!desktop_menu) {
+ if (!cmenu_widget) {
+ cmenu_widget = common_desktop_menu(gscreen);
+ }
+ gtk_menu_set_screen(GTK_MENU(cmenu_widget), gscreen);
+ gtk_menu_popup(GTK_MENU(cmenu_widget), NULL, NULL, NULL, NULL,
+ button, time);
+ return;
+ }
+
if(xfce_desktop_menu_need_update(desktop_menu))
xfce_desktop_menu_force_regen(desktop_menu);
diff -Nur xfdesktop-4.3.99.1/src/xfdesktop-file-icon-manager.c xfdesktop-4.3.99.1.new/src/xfdesktop-file-icon-manager.c
--- xfdesktop-4.3.99.1/src/xfdesktop-file-icon-manager.c 2006-10-23 12:51:26.000000000 +0300
+++ xfdesktop-4.3.99.1.new/src/xfdesktop-file-icon-manager.c 2006-10-23 14:13:01.000000000 +0300
@@ -1508,6 +1508,131 @@
}
}
+XfdesktopFileIconManager *the_fmanager;
+
+GtkWidget *
+common_desktop_menu(GdkScreen *gscreen)
+{
+ GList *l;
+ GtkWidget *menu2, *mi, *img, *menu3;
+ ThunarVfsMimeInfo *minfo;
+ ThunarVfsPath *templates_path;
+ gchar *templates_path_str;
+ gint w = 0, h = 0;
+ GdkPixbuf *pix;
+ XfdesktopFileIconManager *fmanager = the_fmanager;
+#ifdef HAVE_THUNARX
+ GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+#endif
+ gboolean have_templates;
+
+ gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &w, &h);
+ menu2 = gtk_menu_new();
+
+ mi = gtk_image_menu_item_new_with_mnemonic(_("Create _Launcher..."));
+ minfo = thunar_vfs_mime_database_get_info(thunar_mime_database,
+ "application/x-desktop");
+ if(minfo) {
+ const gchar *icon_name = thunar_vfs_mime_info_lookup_icon_name(minfo,
+ gtk_icon_theme_get_default());
+ pix = xfce_themed_icon_load(icon_name, w);
+ if(pix) {
+ img = gtk_image_new_from_pixbuf(pix);
+ gtk_widget_show(img);
+ g_object_unref(G_OBJECT(pix));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img);
+ }
+ }
+ g_object_set_data(G_OBJECT(mi), "xfdesktop-launcher-type", "Application");
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+ g_signal_connect(G_OBJECT(mi), "activate",
+ G_CALLBACK(xfdesktop_file_icon_menu_create_launcher),
+ fmanager);
+
+ mi = gtk_image_menu_item_new_with_mnemonic(_("Create _URL Link..."));
+ pix = xfce_themed_icon_load("gnome-fs-bookmark", w);
+ if(!pix)
+ pix = xfce_themed_icon_load("emblem-favorite", w);
+ if(pix) {
+ img = gtk_image_new_from_pixbuf(pix);
+ gtk_widget_show(img);
+ g_object_unref(G_OBJECT(pix));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img);
+ }
+ g_object_set_data(G_OBJECT(mi), "xfdesktop-launcher-type", "Link");
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+ g_signal_connect(G_OBJECT(mi), "activate",
+ G_CALLBACK(xfdesktop_file_icon_menu_create_launcher),
+ fmanager);
+ mi = gtk_image_menu_item_new_with_mnemonic(_("Create _Folder..."));
+ minfo = thunar_vfs_mime_database_get_info(thunar_mime_database,
+ "inode/directory");
+ if(minfo) {
+ const gchar *icon_name = thunar_vfs_mime_info_lookup_icon_name(minfo,
+ gtk_icon_theme_get_default());
+ pix = xfce_themed_icon_load(icon_name, w);
+ if(pix) {
+ img = gtk_image_new_from_pixbuf(pix);
+ gtk_widget_show(img);
+ g_object_unref(G_OBJECT(pix));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img);
+ }
+ }
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+ g_signal_connect(G_OBJECT(mi), "activate",
+ G_CALLBACK(xfdesktop_file_icon_menu_create_folder),
+ fmanager);
+
+ mi = gtk_menu_item_new_with_mnemonic("Create From _Template");
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+
+ menu3 = gtk_menu_new();
+ gtk_widget_show(menu3);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), menu3);
+
+ templates_path_str = g_build_filename(xfce_get_homedir(),
+ "Templates",
+ NULL);
+ templates_path = thunar_vfs_path_new(templates_path_str, NULL);
+ g_free(templates_path_str);
+ if(templates_path) {
+ have_templates = xfdesktop_file_icon_menu_fill_template_menu(menu3,
+ templates_path,
+ fmanager);
+ thunar_vfs_path_unref(templates_path);
+ }
+
+ img = gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
+ gtk_widget_show(img);
+ mi = gtk_image_menu_item_new_with_mnemonic(_("_Empty File"));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img);
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu3), mi);
+ g_signal_connect(G_OBJECT(mi), "activate",
+ G_CALLBACK(xfdesktop_file_icon_template_item_activated),
+ fmanager);
+
+ mi = gtk_separator_menu_item_new();
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+
+
+ img = gtk_image_new_from_stock(GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
+ gtk_widget_show(img);
+ mi = gtk_image_menu_item_new_with_mnemonic(_("Desktop _Settings..."));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(mi), img);
+ gtk_widget_show(mi);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu2), mi);
+ g_signal_connect(G_OBJECT(mi), "activate",
+ G_CALLBACK(xfdesktop_mcs_settings_launch), fmanager);
+
+ return menu2;
+}
+
static void
xfdesktop_file_icon_menu_popup(XfdesktopIcon *icon,
gpointer user_data)
@@ -2720,7 +2845,8 @@
#endif
g_return_val_if_fail(!fmanager->priv->inited, FALSE);
-
+
+ the_fmanager = fmanager;
fmanager->priv->icon_view = icon_view;
fmanager->priv->gscreen = gtk_widget_get_screen(GTK_WIDGET(icon_view));