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);
>   


Reply via email to