--- /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
+