patches/gnome-panel-11-launch-menu.diff
changeset 7279 e6d86084bb59
parent 7261 57de0d58367f
child 7282 3b22eb8b2323
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/gnome-panel-11-launch-menu.diff	Sat May 13 17:59:05 2006 +0000
@@ -0,0 +1,368 @@
+diff -rup ../gnome-panel-before-patch-13/gnome-panel/menu.c gnome-panel-2.14.1/gnome-panel/menu.c
+--- ../gnome-panel-before-patch-13/gnome-panel/menu.c	2006-05-13 18:33:27.942178000 +0200
++++ gnome-panel-2.14.1/gnome-panel/menu.c	2006-05-13 18:42:56.057327000 +0200
+@@ -49,6 +49,8 @@
+ #include "panel-run-dialog.h"
+ #include "panel-lockdown.h"
+ 
++#define COMPUTER_NAME_KEY       "/apps/nautilus/desktop/computer_icon_name"
++
+ typedef struct {
+ 	GtkWidget    *pixmap;
+ 	const char   *stock_id;
+@@ -1779,12 +1781,94 @@ setup_menu_item_with_icon (GtkWidget   *
+ }
+ 
+ static void
++run_applications (GtkWidget *widget, gpointer user_data)
++{
++    if (!panel_lockdown_get_restrict_application_launching() &&
++            !panel_lockdown_get_disable_command_line()) {
++        panel_run_dialog_present (gtk_widget_get_screen (widget),
++                                                  gtk_get_current_event_time ());
++    }
++}
++
++static void
++applications_menu_append (GtkWidget   *main_menu)
++{
++        GtkWidget *item;
++        GtkWidget *accel_label;
++        GtkWidget *image;
++
++        if (panel_lockdown_get_disable_command_line())
++                return;
++
++        if (!g_object_get_data (G_OBJECT (main_menu),
++                                "panel-menu-needs-appending"))
++                return;
++
++        g_object_set_data (G_OBJECT (main_menu),
++                           "panel-menu-needs-appending", NULL);
++
++        add_menu_separator (main_menu);
++
++        item = gtk_image_menu_item_new ();
++
++        accel_label = gtk_accel_label_new (_("Run Application..."));
++        gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
++
++        gtk_container_add (GTK_CONTAINER (item), accel_label);
++        gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label),
++                                          GTK_WIDGET (item));
++        gtk_widget_show (accel_label);
++
++        image = gtk_image_new_from_icon_name (PANEL_RUN_ICON, panel_menu_icon_get_size ());
++        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
++
++        g_signal_connect (item, "activate",
++                          G_CALLBACK (run_applications), NULL);
++        gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
++        gtk_widget_show (item);
++}
++
++GtkWidget *
++add_xdg_menu (const char *name, const char *path, const char *icon)
++{
++	GtkWidget *item;
++	GtkWidget *accel_label;
++	GtkWidget *image;
++	GtkWidget *menu;
++
++        item = gtk_image_menu_item_new ();
++
++        accel_label = gtk_accel_label_new (name);
++        gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
++
++        gtk_container_add (GTK_CONTAINER (item), accel_label);
++        gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (accel_label),
++                                          GTK_WIDGET (item));
++        gtk_widget_show (accel_label);
++
++        image = gtk_image_new_from_icon_name (icon, panel_menu_icon_get_size ());
++
++        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
++	menu = create_applications_menu (path, NULL);
++        
++
++        if (strcmp (name, "applications.menu") !=0) {
++                g_signal_connect (menu, "show",
++                                  G_CALLBACK (applications_menu_append), NULL);
++        }
++
++        gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
++	
++	return item;
++}
++
++static void
+ main_menu_append (GtkWidget   *main_menu,
+ 		  PanelWidget *panel)
+ {
+ 	GtkWidget *item;
+-	gboolean   add_separator;
+-	GList     *children;
++	EggRecentViewGtk *recent_view;
++	char      *gconf_name;
+ 
+ 	if (!g_object_get_data (G_OBJECT (main_menu),
+ 				"panel-menu-needs-appending"))
+@@ -1793,44 +1877,64 @@ main_menu_append (GtkWidget   *main_menu
+ 	g_object_set_data (G_OBJECT (main_menu),
+ 			   "panel-menu-needs-appending", NULL);
+ 
+-	children = gtk_container_get_children (GTK_CONTAINER (main_menu));
++	item = add_xdg_menu (_("All Applications"), "applications.menu", "gnome-applications");
++        gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
++	gtk_widget_show (item);
+ 
+-	add_separator = FALSE;
+-	if (children != NULL) {
+-		while (children->next != NULL)
+-			children = children->next;
+-		add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (children->data));
+-	}
++	add_menu_separator (main_menu);
+ 
+-	if (add_separator)
+-		add_menu_separator (main_menu);
++        gconf_name = gconf_client_get_string (panel_gconf_get_client (),
++                                              COMPUTER_NAME_KEY,
++                                              NULL);
++        panel_menu_items_append_from_desktop (main_menu,
++                                              "nautilus-computer.desktop",
++                                              gconf_name);
++        if (gconf_name)
++                g_free (gconf_name);
+ 
+ 	item = panel_place_menu_item_new (TRUE);
+ 	panel_place_menu_item_set_panel (item, panel);
+ 	gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
+ 	gtk_widget_show (item);
+ 
+-	item = panel_desktop_menu_item_new (TRUE, FALSE);
+-	panel_desktop_menu_item_set_panel (item, panel);
+-	gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
++	recent_view = NULL;
++        recent_view = panel_recent_append_documents_menu (main_menu, recent_view);
++        panel_menu_items_append_from_desktop (main_menu,
++                                              "gnome-search-tool.desktop",
++                                              NULL);
++
++	add_menu_separator (main_menu);
++	add_menu_separator (main_menu);
++
++	item = add_xdg_menu (_("Preferences"), "preferences.menu", "gnome-settings");
++        gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
++	gtk_widget_show (item);
++
++	item = add_xdg_menu (_("Administration"), "settings.menu", "gnome-system");
++        gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
+ 	gtk_widget_show (item);
+ 
++        panel_menu_items_append_from_desktop (main_menu,
++                                              "yelp.desktop",
++                                              NULL);
++
+ 	panel_menu_items_append_lock_logout (main_menu);
+ }
+ 
+ GtkWidget *
+ create_main_menu (PanelWidget *panel)
+ {
+-	GtkWidget *main_menu;
++        GtkWidget        *main_menu;
++
++        main_menu = create_applications_menu ("quickstart.menu", NULL);
+ 
+-	main_menu = create_applications_menu ("applications.menu", NULL);
+-	g_object_set_data (G_OBJECT (main_menu), "menu_panel", panel);
+-	/* FIXME need to update the panel on parent_set */
++        g_object_set_data (G_OBJECT (main_menu), "menu_panel", panel);
++        /* FIXME need to update the panel on parent_set */
+ 
+-	g_signal_connect (main_menu, "show",
+-			  G_CALLBACK (main_menu_append), panel);
++        g_signal_connect (main_menu, "show",
++                          G_CALLBACK (main_menu_append), panel);
+ 
+-	return main_menu;
++        return main_menu;
+ }
+ 
+ static GList *
+diff -rup ../gnome-panel-before-patch-13/gnome-panel/panel-menu-button.c gnome-panel-2.14.1/gnome-panel/panel-menu-button.c
+--- ../gnome-panel-before-patch-13/gnome-panel/panel-menu-button.c	2006-05-13 18:33:28.326358000 +0200
++++ gnome-panel-2.14.1/gnome-panel/panel-menu-button.c	2006-05-13 18:41:35.453211000 +0200
+@@ -38,6 +38,8 @@
+ #include "panel-lockdown.h"
+ #include "panel-a11y.h"
+ 
++#define COMPUTER_NAME_KEY       "/apps/nautilus/desktop/computer_icon_name"
++
+ #define PANEL_MENU_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_TYPE_MENU_BUTTON, PanelMenuButtonPrivate))
+ 
+ enum {
+@@ -398,6 +400,18 @@ panel_menu_button_create_menu (PanelMenu
+ }
+ 
+ static void
++panel_menu_button_reload_menus (GConfClient       *client,
++                                guint              cnxn_id,
++                                GConfEntry        *entry,
++                                PanelMenuButton   *button)
++{
++	if (button->priv->menu) {
++        	gtk_widget_destroy (GTK_WIDGET (button->priv->menu));
++        	panel_menu_button_create_menu (button);
++	}
++}
++
++static void
+ panel_menu_button_recreate_menu (PanelMenuButton *button)
+ {
+ 	if (button->priv->menu)
+@@ -694,6 +708,11 @@ panel_menu_button_load (const char  *men
+ 
+ 	panel_lockdown_notify_add (G_CALLBACK (panel_menu_button_recreate_menu),
+ 				   button);
++
++        panel_gconf_notify_add_while_alive (COMPUTER_NAME_KEY,
++                                            (GConfClientNotifyFunc) panel_menu_button_reload_menus,
++                                            G_OBJECT (button));
++
+ }
+ 
+ static char *
+diff -rup ../gnome-panel-before-patch-13/gnome-panel/panel-menu-items.c gnome-panel-2.14.1/gnome-panel/panel-menu-items.c
+--- ../gnome-panel-before-patch-13/gnome-panel/panel-menu-items.c	2006-05-13 18:33:28.326736000 +0200
++++ gnome-panel-2.14.1/gnome-panel/panel-menu-items.c	2006-05-13 18:44:44.072133000 +0200
+@@ -54,8 +54,6 @@
+ #define DESKTOP_IS_HOME_DIR_DIR "/apps/nautilus/preferences"
+ #define DESKTOP_IS_HOME_DIR_KEY "/apps/nautilus/preferences/desktop_is_home_dir"
+ #define NAMES_DIR               "/apps/nautilus/desktop"
+-#define HOME_NAME_KEY           "/apps/nautilus/desktop/home_icon_name"
+-#define COMPUTER_NAME_KEY       "/apps/nautilus/desktop/computer_icon_name"
+ #define MAX_ITEMS_OR_SUBMENU    5
+ 
+ #define PANEL_PLACE_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PANEL_TYPE_PLACE_MENU_ITEM, PanelPlaceMenuItemPrivate))
+@@ -118,7 +116,7 @@ activate_uri (GtkWidget *menuitem,
+ 	g_free (url);
+ }
+  
+-static void
++void
+ panel_menu_items_append_from_desktop (GtkWidget *menu,
+ 				      char      *path,
+ 				      char      *force_name)
+@@ -579,18 +577,10 @@ panel_place_menu_item_create_menu (EggRe
+ 	GtkWidget *places_menu;
+ 	GtkWidget *item;
+ 	char      *gconf_name;
++	char      *documents_link;
+ 
+ 	places_menu = panel_create_menu ();
+ 
+-	gconf_name = gconf_client_get_string (panel_gconf_get_client (),
+-					      HOME_NAME_KEY,
+-					      NULL);
+-	panel_menu_items_append_from_desktop (places_menu,
+-					      "nautilus-home.desktop",
+-					      gconf_name);
+-	if (gconf_name)
+-		g_free (gconf_name);
+-
+ 	if (!gconf_client_get_bool (panel_gconf_get_client (),
+ 				    DESKTOP_IS_HOME_DIR_KEY,
+ 				    NULL))
+@@ -606,18 +596,19 @@ panel_place_menu_item_create_menu (EggRe
+ 				G_CALLBACK (activate_uri),
+ 				"Desktop");
+ 
++	documents_link = g_build_filename (g_get_home_dir (), "Documents", NULL); 
++
++        panel_menu_items_append_place_item ("gnome-fs-directory",
++                                            _("Documents"),
++                                            _("Open Documents folder"),
++                                            places_menu,
++                                            G_CALLBACK (activate_uri),
++                                            documents_link);
++        g_free (documents_link);
++
+ 	panel_place_menu_item_append_gtk_bookmarks (places_menu);
+ 	add_menu_separator (places_menu);
+ 
+-	gconf_name = gconf_client_get_string (panel_gconf_get_client (),
+-					      COMPUTER_NAME_KEY,
+-					      NULL);
+-	panel_menu_items_append_from_desktop (places_menu,
+-					      "nautilus-computer.desktop",
+-					      gconf_name);
+-	if (gconf_name)
+-		g_free (gconf_name);
+-
+ 	panel_menu_items_append_from_desktop (places_menu,
+ 					      "nautilus-cd-burner.desktop",
+ 					      NULL);
+@@ -637,15 +628,6 @@ panel_place_menu_item_create_menu (EggRe
+ 					       item);
+ 	}
+ 
+-	add_menu_separator (places_menu);
+-
+-	panel_menu_items_append_from_desktop (places_menu,
+-					      "gnome-search-tool.desktop",
+-					      NULL);
+-
+-	*recent_view = panel_recent_append_documents_menu (places_menu,
+-							   *recent_view);
+-
+ 	return places_menu;
+ }
+ 
+@@ -821,15 +803,9 @@ panel_place_menu_item_instance_init (Pan
+ 			      GCONF_CLIENT_PRELOAD_NONE,
+ 			      NULL);
+ 
+-	panel_gconf_notify_add_while_alive (HOME_NAME_KEY,
+-					    (GConfClientNotifyFunc) panel_place_menu_item_key_changed,
+-					    G_OBJECT (menuitem));
+ 	panel_gconf_notify_add_while_alive (DESKTOP_IS_HOME_DIR_KEY,
+ 					    (GConfClientNotifyFunc) panel_place_menu_item_key_changed,
+ 					    G_OBJECT (menuitem));
+-	panel_gconf_notify_add_while_alive (COMPUTER_NAME_KEY,
+-					    (GConfClientNotifyFunc) panel_place_menu_item_key_changed,
+-					    G_OBJECT (menuitem));
+ 
+ 	bookmarks_filename = g_build_filename (g_get_home_dir (),
+ 					       BOOKMARKS_FILENAME, NULL);
+@@ -953,7 +929,6 @@ panel_desktop_menu_item_get_type (void)
+ 	return type;
+ }
+ 
+-
+ GtkWidget *
+ panel_place_menu_item_new (gboolean use_image)
+ {
+@@ -962,7 +937,7 @@ panel_place_menu_item_new (gboolean use_
+ 
+ 	menuitem = g_object_new (PANEL_TYPE_PLACE_MENU_ITEM, NULL);
+ 
+-	accel_label = gtk_accel_label_new (_("Places"));
++	accel_label = gtk_accel_label_new (g_get_user_name ());
+ 	gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
+ 
+ 	gtk_container_add (GTK_CONTAINER (menuitem), accel_label);
+diff -rup ../gnome-panel-before-patch-13/gnome-panel/panel-menu-items.h gnome-panel-2.14.1/gnome-panel/panel-menu-items.h
+--- ../gnome-panel-before-patch-13/gnome-panel/panel-menu-items.h	2006-05-13 18:33:28.340364000 +0200
++++ gnome-panel-2.14.1/gnome-panel/panel-menu-items.h	2006-05-13 18:41:35.455784000 +0200
+@@ -90,6 +90,9 @@ void panel_desktop_menu_item_set_panel (
+ void panel_menu_items_append_lock_logout (GtkWidget *menu);
+ void panel_menu_item_activate_desktop_file (GtkWidget  *menuitem,
+ 					    const char *path);
++void panel_menu_items_append_from_desktop (GtkWidget *menu,
++                                           char      *path,
++                                           char      *force_name);
+ 
+ G_END_DECLS
+