Glynn,
I haven't trawled through the diff of the diff :) or the enture patch
either, just wanted
to ensure that whatever branding you are putting in place for menus contains
any relevant lockdown stuff aswell....
cheers
Matt
Glynn Foster wrote:
> Hey,
>
> On fixing #6533822, I came across a whole bunch of other issues, and tried to
> best fix the panel menubar.
>
> Here's the resulting diff changes, but have also attached the complete patch.
>
>
> Glynn
>
> ------------------------------------------------------------------------
>
> Index: ChangeLog
> ===================================================================
> --- ChangeLog (revision 10886)
> +++ ChangeLog (working copy)
> @@ -1,3 +1,9 @@
> +2007-03-15 Glynn Foster <glynn.foster at sun.com>
> +
> + * patches/gnome-panel-08-launch-menu.diff: Update fixing a couple
> + of crashers due to severe crack in the original patch. Fixes #6533822
> + in particular.
> +
> 2007-03-14 Laszlo (Laca) Peter <laca at sun.com>
>
> * SUNWgnome-img-organizer.spec: update postrun scripts to the latest
> Index: patches/gnome-panel-08-launch-menu.diff
> ===================================================================
> --- patches/gnome-panel-08-launch-menu.diff (revision 10886)
> +++ patches/gnome-panel-08-launch-menu.diff (working copy)
> @@ -1,7 +1,7 @@
> diff -urN gnome-panel-2.17.92/gnome-panel/menu.c
> gnome-panel-2.17.92-hacked/gnome-panel/menu.c
> --- gnome-panel-2.17.92/gnome-panel/menu.c 2007-03-07 13:19:42.271056000
> +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/menu.c 2007-03-07
> 17:50:10.890341000 +1300
> -@@ -1802,39 +1802,129 @@
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/menu.c 2007-03-15
> 12:20:04.207631000 +1300
> +@@ -1802,39 +1802,123 @@
> setup_menuitem (item, icon_size, NULL, title,
> create_invisible_mnemonic);
> }
>
> @@ -25,6 +25,10 @@
> + 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);
> +
> @@ -32,7 +36,6 @@
> +
> + item = gtk_image_menu_item_new ();
> +
> -+ /* SUN_BRANDING */
> + accel_label = gtk_accel_label_new (_("Run Application..."));
> + gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
> +
> @@ -44,8 +47,7 @@
> + 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);
> ++ g_signal_connect (item, "activate", G_CALLBACK (run_applications),
> NULL);
> + gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> + gtk_widget_show (item);
> +}
> @@ -74,8 +76,8 @@
> + menu = create_applications_menu (path, NULL);
> +
> + if (strcmp (path, "applications.menu") == 0) {
> -+ g_signal_connect (menu, "show",
> -+ G_CALLBACK (applications_menu_append),
> NULL);
> ++ g_object_set_data (G_OBJECT (menu),
> "panel-menu-needs-appending", TRUE);
> ++ g_signal_connect (menu, "show", G_CALLBACK
> (applications_menu_append), NULL);
> + }
> +
> + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
> @@ -91,8 +93,8 @@
> GtkWidget *item;
> - gboolean add_separator;
> - GList *children;
> - GList *last;
> -+ GtkRecentManager *recent_view;
> +- GList *last;
> ++ GtkRecentManager *recent_view;
>
> panel = PANEL_WIDGET (data);
>
> @@ -103,10 +105,9 @@
> - add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
> - }
> - g_list_free (children);
> -+ /* SUN_BRANDING */
> -+ item = add_xdg_menu (_("All Applications"), "applications.menu",
> "gnome-applications");
> -+ gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> -+ gtk_widget_show (item);
> ++ item = add_xdg_menu (_("All Applications"), "applications.menu",
> "gnome-applications");
> ++ gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> ++ gtk_widget_show (item);
>
> - if (add_separator)
> - add_menu_separator (main_menu);
> @@ -119,32 +120,26 @@
>
> - item = panel_desktop_menu_item_new (TRUE, FALSE);
> - panel_desktop_menu_item_set_panel (item, panel);
> -+ recent_view = gtk_recent_manager_get_default ();
> -+ panel_recent_append_documents_menu (main_menu, recent_view);
> -+ panel_menu_items_append_from_desktop (main_menu,
> -+
> "gnome-search-tool.desktop",
> -+
> NULL);
> ++ recent_view = gtk_recent_manager_get_default ();
> ++ 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);
> +
> -+ /* SUN_BRANDING */
> -+ item = add_xdg_menu (_("Preferences"), "preferences.menu",
> "gnome-settings");
> -+ gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> -+ gtk_widget_show (item);
> -+
> -+ /* SUN_BRANDING */
> -+ item = add_xdg_menu (_("Administration"), "settings.menu",
> "gnome-system");
> ++ item = add_xdg_menu (_("Preferences"), "preferences.menu",
> "gnome-settings");
> 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);
> ++ 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);
> }
>
> -@@ -1843,7 +1933,7 @@
> +@@ -1843,7 +1927,7 @@
> {
> GtkWidget *main_menu;
>
> @@ -155,7 +150,7 @@
>
> diff -urN gnome-panel-2.17.92/gnome-panel/menu.h
> gnome-panel-2.17.92-hacked/gnome-panel/menu.h
> --- gnome-panel-2.17.92/gnome-panel/menu.h 2007-03-07 13:19:42.386037000
> +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/menu.h 2007-03-07
> 13:20:12.253296000 +1300
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/menu.h 2007-03-15
> 12:20:07.021275000 +1300
> @@ -66,6 +66,8 @@
>
> gboolean menu_dummy_button_press_event (GtkWidget *menuitem,
> @@ -167,20 +162,51 @@
> G_END_DECLS
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-bar.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-bar.c
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-bar.c 2007-03-07
> 13:19:42.331555000 +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-bar.c 2007-03-07
> 13:20:12.254279000 +1300
> -@@ -207,6 +207,9 @@
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-bar.c 2007-03-15
> 12:20:04.647817000 +1300
> +@@ -182,8 +182,10 @@
> + gtk_widget_destroy (
> + GTK_MENU_SHELL
> (menubar->priv->applications_menu)->children->data);
> + }
> +- menubar->priv->applications_menu =
> +- create_applications_menu
> ("applications.menu", NULL);
> ++ menubar->priv->applications_menu = create_applications_menu
> ("applications.menu", NULL);
> ++ g_object_set_data (G_OBJECT
> (menubar->priv->applications_menu), "panel-menu-needs-appending", TRUE);
> ++ g_signal_connect (menubar->priv->applications_menu, "show",
> G_CALLBACK (applications_menu_append), NULL);
> ++
> + gtk_menu_item_set_submenu
> + (GTK_MENU_ITEM
> (menubar->priv->applications_item),
> + menubar->priv->applications_menu);
> +@@ -206,6 +208,8 @@
> + menubar->priv->info = NULL;
>
> menubar->priv->applications_menu = create_applications_menu
> ("applications.menu", NULL);
> ++ g_object_set_data (G_OBJECT (menubar->priv->applications_menu),
> "panel-menu-needs-appending", TRUE);
> ++ g_signal_connect (menubar->priv->applications_menu, "show",
> G_CALLBACK (applications_menu_append), NULL);
>
> -+ g_signal_connect (menubar->priv->applications_menu, "show",
> -+ G_CALLBACK
> (applications_menu_append), NULL);
> -+
> menubar->priv->applications_item = gtk_image_menu_item_new_with_label
> (_("Applications"));
> image = gtk_image_new_from_icon_name (PANEL_GNOME_LOGO_ICON,
> - panel_menu_bar_icon_get_size ());
> +diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-button.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-button.c
> +--- gnome-panel-2.17.92/gnome-panel/panel-menu-button.c 2007-03-07
> 13:19:42.333065000 +1300
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-button.c
> 2007-03-15 12:20:04.707354000 +1300
> +@@ -58,6 +58,7 @@
> + FIRST_MENU,
> + APPLICATIONS_MENU,
> + #define DEFAULT_MENU APPLICATIONS_MENU
> ++ PREFERENCES_MENU,
> + SETTINGS_MENU,
> + LAST_MENU
> + } MenuPathRoot;
> +@@ -70,6 +71,7 @@
> +
> + static MenuPathRootItem root_items [] = {
> + { APPLICATIONS_MENU, "applications", "applications.menu" },
> ++ { PREFERENCES_MENU, "preferences", "preferences.menu" },
> + { SETTINGS_MENU, "settings", "settings.menu" }
> + };
> +
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-items.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.c
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-items.c 2007-03-07
> 13:19:42.334056000 +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.c
> 2007-03-07 13:55:19.963632000 +1300
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.c
> 2007-03-15 12:20:04.774499000 +1300
> @@ -120,7 +120,7 @@
> g_free (url);
> }
> @@ -190,7 +216,11 @@
> panel_menu_items_append_from_desktop (GtkWidget *menu,
> char *path,
> char *force_name)
> -@@ -581,15 +581,6 @@
> +@@ -578,18 +578,10 @@
> + GtkWidget *places_menu;
> + GtkWidget *item;
> + char *gconf_name;
> ++ GtkRecentManager *recent_view;
>
> places_menu = panel_create_menu ();
>
> @@ -206,116 +236,132 @@
> if (!gconf_client_get_bool (panel_gconf_get_client (),
> DESKTOP_IS_HOME_DIR_KEY,
> NULL)) {
> -@@ -644,15 +635,6 @@
> - item);
> - }
> +@@ -646,12 +638,9 @@
>
> -- add_menu_separator (places_menu);
> --
> + add_menu_separator (places_menu);
> +
> - panel_menu_items_append_from_desktop (places_menu,
> - "gnome-search-tool.desktop",
> - NULL);
> -
> - panel_recent_append_documents_menu (places_menu,
> - place_item->priv->recent_manager);
> --
> ++ recent_view = gtk_recent_manager_get_default ();
> ++ panel_recent_append_documents_menu (places_menu, recent_view);
> ++ panel_menu_items_append_from_desktop (places_menu,
> "gnome-search-tool.desktop", NULL);
> +
> return places_menu;
> }
> -
> -@@ -732,11 +714,59 @@
> +@@ -701,49 +690,53 @@
> + panel_place_menu_item_recreate_menu (place_menu);
> }
>
> - static GtkWidget *
> +-static void
> +-panel_desktop_menu_item_append_menu (GtkWidget *menu,
> +- gpointer data)
> ++static GtkWidget *
> +add_xdg_menu (const char *name, const char *path, const char *icon)
> -+{
> + {
> +- PanelDesktopMenuItem *parent;
> +- gboolean add_separator;
> +- GList *children;
> +- GList *last;
> + GtkWidget *item;
> + GtkWidget *accel_label;
> + GtkWidget *image;
> + GtkWidget *menu;
> -+
> +
> +- parent = PANEL_DESKTOP_MENU_ITEM (data);
> + item = gtk_image_menu_item_new ();
> -+
> +
> +- add_separator = FALSE;
> +- children = gtk_container_get_children (GTK_CONTAINER (menu));
> +- last = g_list_last (children);
> + accel_label = gtk_accel_label_new (name);
> + gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
> -+
> +
> +- if (last != NULL)
> +- add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
> + 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);
> -+
> +
> +- g_list_free (children);
> + image = gtk_image_new_from_icon_name (icon,
> panel_menu_icon_get_size ());
> -+
> +
> +- if (add_separator)
> +- add_menu_separator (menu);
> + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
> + menu = create_applications_menu (path, NULL);
> -+
> +
> +- panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL);
> +- panel_menu_items_append_from_desktop (menu, "gnome-about.desktop",
> NULL);
> + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
> -+
> +
> +- if (parent->priv->append_lock_logout)
> +- panel_menu_items_append_lock_logout (menu);
> + return item;
> -+}
> -+
> -+static GtkWidget *
> + }
> +
> + static GtkWidget *
> panel_desktop_menu_item_create_menu (PanelDesktopMenuItem *desktop_item)
> {
> GtkWidget *desktop_menu;
> + GtkWidget *item;
> -+ GtkRecentManager *recent_view;
> -
> -- desktop_menu = create_applications_menu ("settings.menu", NULL);
> -+ g_object_set_data (G_OBJECT (desktop_menu),
> -+ "panel-menu-needs-appending",
> -+ GUINT_TO_POINTER (TRUE));
> +
> -+ /* SUN_BRANDING */
> ++ desktop_menu = panel_create_menu ();
> ++
> + item = add_xdg_menu (_("Preferences"), "preferences.menu",
> "gnome-settings");
> + gtk_menu_shell_append (GTK_MENU_SHELL (desktop_menu), item);
> + gtk_widget_show (item);
> -+
> -+ /* SUN_BRANDING */
> ++
> + item = add_xdg_menu (_("Administration"), "settings.menu",
> "gnome-system");
> + gtk_menu_shell_append (GTK_MENU_SHELL (desktop_menu), item);
> + gtk_widget_show (item);
> -+
> -+ add_menu_separator (desktop_menu);
> -+
> -+ recent_view = gtk_recent_manager_get_default ();
> -+ panel_recent_append_documents_menu (desktop_menu, recent_view);
> -+ panel_menu_items_append_from_desktop (desktop_menu,
> "gnome-search-tool.desktop", NULL);
>
> - g_object_set_data (G_OBJECT (desktop_menu),
> - "panel-menu-append-callback",
> +- desktop_menu = create_applications_menu ("settings.menu", NULL);
> ++ panel_menu_items_append_from_desktop (desktop_menu, "yelp.desktop",
> NULL);
> +
> +- g_object_set_data (G_OBJECT (desktop_menu),
> +- "panel-menu-append-callback",
> +- panel_desktop_menu_item_append_menu);
> +- g_object_set_data (G_OBJECT (desktop_menu),
> +- "panel-menu-append-callback-data",
> +- desktop_item);
> ++ panel_menu_items_append_lock_logout (desktop_menu);
> +
> + return desktop_menu;
> + }
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-items.h
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.h
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-items.h 2007-03-07
> 13:19:42.389906000 +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.h
> 2007-03-07 13:20:12.258062000 +1300
> -@@ -92,6 +92,9 @@
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.h
> 2007-03-15 12:20:07.292055000 +1300
> +@@ -92,6 +92,7 @@
> const char *path);
> void panel_place_menu_item_recreate_menu (GtkWidget *widget);
> void panel_desktop_menu_item_recreate_menu (PanelDesktopMenuItem
> *desktop_item);
> -+void panel_menu_items_append_from_desktop (GtkWidget *menu,
> -+
> char *path,
> -+
> char *force_name);
> ++void panel_menu_items_append_from_desktop (GtkWidget *menu, char *path,
> char *force_name);
>
> G_END_DECLS
>
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-recent.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-recent.c
> --- gnome-panel-2.17.92/gnome-panel/panel-recent.c 2007-03-07
> 13:19:42.335633000 +1300
> -+++ gnome-panel-2.17.92-hacked/gnome-panel/panel-recent.c 2007-03-07
> 13:20:12.258664000 +1300
> -@@ -233,12 +233,13 @@
> ++++ gnome-panel-2.17.92-hacked/gnome-panel/panel-recent.c 2007-03-15
> 12:20:04.822459000 +1300
> +@@ -233,12 +233,12 @@
>
> //FIXME this is not possible with GtkRecent...:
> egg_recent_view_gtk_set_icon_size (view, panel_menu_icon_get_size ());
>
> - g_signal_connect_object (manager, "changed",
> - G_CALLBACK (panel_recent_manager_changed_cb),
> - menu_item, 0);
> --
> ++ if (manager) {
> ++ g_signal_connect_object (manager, "changed", G_CALLBACK
> (panel_recent_manager_changed_cb), menu_item, 0);
> ++ size = 0;
> ++ g_object_get (manager, "size", &size, NULL);
> ++ }
> +
> - size = 0;
> - g_object_get (manager, "size", &size, NULL);
> -+ if (manager) {
> -+ g_signal_connect_object (manager, "changed",
> -+ G_CALLBACK
> (panel_recent_manager_changed_cb),
> -+ menu_item, 0);
> -+ size = 0;
> -+ g_object_get (manager, "size", &size, NULL);
> -+ }
> gtk_widget_set_sensitive (menu_item, size > 0);
>
> add_menu_separator (recent_menu);
>
> ------------------------------------------------------------------------
>
> diff -urN gnome-panel-2.17.92/gnome-panel/menu.c
> gnome-panel-2.17.92-hacked/gnome-panel/menu.c
> --- gnome-panel-2.17.92/gnome-panel/menu.c 2007-03-07 13:19:42.271056000
> +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/menu.c 2007-03-15
> 12:20:04.207631000 +1300
> @@ -1802,39 +1802,123 @@
> setup_menuitem (item, icon_size, NULL, title,
> create_invisible_mnemonic);
> }
>
> +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 ());
> + }
> +}
> +
> +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 (path, "applications.menu") == 0) {
> + g_object_set_data (G_OBJECT (menu),
> "panel-menu-needs-appending", TRUE);
> + 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,
> gpointer data)
> {
> PanelWidget *panel;
> GtkWidget *item;
> - gboolean add_separator;
> - GList *children;
> - GList *last;
> + GtkRecentManager *recent_view;
>
> panel = PANEL_WIDGET (data);
>
> - add_separator = FALSE;
> - children = gtk_container_get_children (GTK_CONTAINER (main_menu));
> - last = g_list_last (children);
> - if (last != NULL) {
> - add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
> - }
> - g_list_free (children);
> + item = add_xdg_menu (_("All Applications"), "applications.menu",
> "gnome-applications");
> + gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> + gtk_widget_show (item);
>
> - if (add_separator)
> - add_menu_separator (main_menu);
> + add_menu_separator (main_menu);
>
> 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);
> + recent_view = gtk_recent_manager_get_default ();
> + 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);
> +
> + 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);
> }
>
> @@ -1843,7 +1927,7 @@
> {
> GtkWidget *main_menu;
>
> - main_menu = create_applications_menu ("applications.menu", NULL);
> + main_menu = create_applications_menu ("quickstart.menu", NULL);
> g_object_set_data (G_OBJECT (main_menu), "menu_panel", panel);
> /* FIXME need to update the panel on parent_set */
>
> diff -urN gnome-panel-2.17.92/gnome-panel/menu.h
> gnome-panel-2.17.92-hacked/gnome-panel/menu.h
> --- gnome-panel-2.17.92/gnome-panel/menu.h 2007-03-07 13:19:42.386037000
> +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/menu.h 2007-03-15
> 12:20:07.021275000 +1300
> @@ -66,6 +66,8 @@
>
> gboolean menu_dummy_button_press_event (GtkWidget *menuitem,
> GdkEventButton *event);
> +void run_applications (GtkWidget *widget, gpointer user_data);
> +void applications_menu_append (GtkWidget *main_menu);
>
>
> G_END_DECLS
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-bar.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-bar.c
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-bar.c 2007-03-07
> 13:19:42.331555000 +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-bar.c 2007-03-15
> 12:20:04.647817000 +1300
> @@ -182,8 +182,10 @@
> gtk_widget_destroy (
> GTK_MENU_SHELL
> (menubar->priv->applications_menu)->children->data);
> }
> - menubar->priv->applications_menu =
> - create_applications_menu
> ("applications.menu", NULL);
> + menubar->priv->applications_menu = create_applications_menu
> ("applications.menu", NULL);
> + g_object_set_data (G_OBJECT
> (menubar->priv->applications_menu), "panel-menu-needs-appending", TRUE);
> + g_signal_connect (menubar->priv->applications_menu, "show",
> G_CALLBACK (applications_menu_append), NULL);
> +
> gtk_menu_item_set_submenu
> (GTK_MENU_ITEM
> (menubar->priv->applications_item),
> menubar->priv->applications_menu);
> @@ -206,6 +208,8 @@
> menubar->priv->info = NULL;
>
> menubar->priv->applications_menu = create_applications_menu
> ("applications.menu", NULL);
> + g_object_set_data (G_OBJECT (menubar->priv->applications_menu),
> "panel-menu-needs-appending", TRUE);
> + g_signal_connect (menubar->priv->applications_menu, "show",
> G_CALLBACK (applications_menu_append), NULL);
>
> menubar->priv->applications_item = gtk_image_menu_item_new_with_label
> (_("Applications"));
> image = gtk_image_new_from_icon_name (PANEL_GNOME_LOGO_ICON,
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-button.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-button.c
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-button.c 2007-03-07
> 13:19:42.333065000 +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-button.c
> 2007-03-15 12:20:04.707354000 +1300
> @@ -58,6 +58,7 @@
> FIRST_MENU,
> APPLICATIONS_MENU,
> #define DEFAULT_MENU APPLICATIONS_MENU
> + PREFERENCES_MENU,
> SETTINGS_MENU,
> LAST_MENU
> } MenuPathRoot;
> @@ -70,6 +71,7 @@
>
> static MenuPathRootItem root_items [] = {
> { APPLICATIONS_MENU, "applications", "applications.menu" },
> + { PREFERENCES_MENU, "preferences", "preferences.menu" },
> { SETTINGS_MENU, "settings", "settings.menu" }
> };
>
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-items.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.c
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-items.c 2007-03-07
> 13:19:42.334056000 +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.c 2007-03-15
> 12:20:04.774499000 +1300
> @@ -120,7 +120,7 @@
> g_free (url);
> }
>
> -static void
> +void
> panel_menu_items_append_from_desktop (GtkWidget *menu,
> char *path,
> char *force_name)
> @@ -578,18 +578,10 @@
> GtkWidget *places_menu;
> GtkWidget *item;
> char *gconf_name;
> + GtkRecentManager *recent_view;
>
> 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)) {
> @@ -646,12 +638,9 @@
>
> add_menu_separator (places_menu);
>
> - panel_menu_items_append_from_desktop (places_menu,
> - "gnome-search-tool.desktop",
> - NULL);
> -
> - panel_recent_append_documents_menu (places_menu,
> - place_item->priv->recent_manager);
> + recent_view = gtk_recent_manager_get_default ();
> + panel_recent_append_documents_menu (places_menu, recent_view);
> + panel_menu_items_append_from_desktop (places_menu,
> "gnome-search-tool.desktop", NULL);
>
> return places_menu;
> }
> @@ -701,49 +690,53 @@
> panel_place_menu_item_recreate_menu (place_menu);
> }
>
> -static void
> -panel_desktop_menu_item_append_menu (GtkWidget *menu,
> - gpointer data)
> +static GtkWidget *
> +add_xdg_menu (const char *name, const char *path, const char *icon)
> {
> - PanelDesktopMenuItem *parent;
> - gboolean add_separator;
> - GList *children;
> - GList *last;
> + GtkWidget *item;
> + GtkWidget *accel_label;
> + GtkWidget *image;
> + GtkWidget *menu;
>
> - parent = PANEL_DESKTOP_MENU_ITEM (data);
> + item = gtk_image_menu_item_new ();
>
> - add_separator = FALSE;
> - children = gtk_container_get_children (GTK_CONTAINER (menu));
> - last = g_list_last (children);
> + accel_label = gtk_accel_label_new (name);
> + gtk_misc_set_alignment (GTK_MISC (accel_label), 0.0, 0.5);
>
> - if (last != NULL)
> - add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (last->data));
> + 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);
>
> - g_list_free (children);
> + image = gtk_image_new_from_icon_name (icon, panel_menu_icon_get_size
> ());
>
> - if (add_separator)
> - add_menu_separator (menu);
> + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
> + menu = create_applications_menu (path, NULL);
>
> - panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL);
> - panel_menu_items_append_from_desktop (menu, "gnome-about.desktop",
> NULL);
> + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
>
> - if (parent->priv->append_lock_logout)
> - panel_menu_items_append_lock_logout (menu);
> + return item;
> }
>
> static GtkWidget *
> panel_desktop_menu_item_create_menu (PanelDesktopMenuItem *desktop_item)
> {
> GtkWidget *desktop_menu;
> + GtkWidget *item;
> +
> + desktop_menu = panel_create_menu ();
> +
> + item = add_xdg_menu (_("Preferences"), "preferences.menu",
> "gnome-settings");
> + gtk_menu_shell_append (GTK_MENU_SHELL (desktop_menu), item);
> + gtk_widget_show (item);
> +
> + item = add_xdg_menu (_("Administration"), "settings.menu",
> "gnome-system");
> + gtk_menu_shell_append (GTK_MENU_SHELL (desktop_menu), item);
> + gtk_widget_show (item);
>
> - desktop_menu = create_applications_menu ("settings.menu", NULL);
> + panel_menu_items_append_from_desktop (desktop_menu, "yelp.desktop",
> NULL);
>
> - g_object_set_data (G_OBJECT (desktop_menu),
> - "panel-menu-append-callback",
> - panel_desktop_menu_item_append_menu);
> - g_object_set_data (G_OBJECT (desktop_menu),
> - "panel-menu-append-callback-data",
> - desktop_item);
> + panel_menu_items_append_lock_logout (desktop_menu);
>
> return desktop_menu;
> }
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-menu-items.h
> gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.h
> --- gnome-panel-2.17.92/gnome-panel/panel-menu-items.h 2007-03-07
> 13:19:42.389906000 +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/panel-menu-items.h 2007-03-15
> 12:20:07.292055000 +1300
> @@ -92,6 +92,7 @@
> const char *path);
> void panel_place_menu_item_recreate_menu (GtkWidget *widget);
> void panel_desktop_menu_item_recreate_menu (PanelDesktopMenuItem
> *desktop_item);
> +void panel_menu_items_append_from_desktop (GtkWidget *menu, char *path, char
> *force_name);
>
> G_END_DECLS
>
> diff -urN gnome-panel-2.17.92/gnome-panel/panel-recent.c
> gnome-panel-2.17.92-hacked/gnome-panel/panel-recent.c
> --- gnome-panel-2.17.92/gnome-panel/panel-recent.c 2007-03-07
> 13:19:42.335633000 +1300
> +++ gnome-panel-2.17.92-hacked/gnome-panel/panel-recent.c 2007-03-15
> 12:20:04.822459000 +1300
> @@ -233,12 +233,12 @@
>
> //FIXME this is not possible with GtkRecent...:
> egg_recent_view_gtk_set_icon_size (view, panel_menu_icon_get_size ());
>
> - g_signal_connect_object (manager, "changed",
> - G_CALLBACK (panel_recent_manager_changed_cb),
> - menu_item, 0);
> + if (manager) {
> + g_signal_connect_object (manager, "changed", G_CALLBACK
> (panel_recent_manager_changed_cb), menu_item, 0);
> + size = 0;
> + g_object_get (manager, "size", &size, NULL);
> + }
>
> - size = 0;
> - g_object_get (manager, "size", &size, NULL);
> gtk_widget_set_sensitive (menu_item, size > 0);
>
> add_menu_separator (recent_menu);
>