Glynn, w.r.t. the alacarte patch, from what I know it was meant to provide a 
mechanism where the
panel could be notified of a change in the menu files - this was necessary due 
to a lack of file
monitoring support in GNOME VFS - it should go away once we have the ability to 
port libfam or Gamin
to Solaris, but until then it'll be necessary so that the user can see the 
changes made reflected in
the launch menu...

>From what I can tell there should be an alacarte patch to match...

Darren.

Glynn Foster wrote:
> Hey,
> 
> Just hacked up some changes according to a new UI specification. What it
> basically does is axe the old 'username' menu, and bring back the community
> places. It also re-jigs a few bits and pieces, and fixes up the menu bar. 
> It's a
> really hacky patch, and I'd much prefer if this stuff was upstream - Calum's
> going to see if he can push it there.
> 
> In the meantime, he's a pretty ugly patch. I've committed this so it can get 
> in
> the build as soon as possible and get some user testing. At the moment, patch 
> 14
> [alacarte support] is disabled - I need to do some research into what that did
> and why.
> 
> 
> Glynn
> 
> 
> ------------------------------------------------------------------------
> 
> diff -urN gnome-panel-2.16.1/gnome-panel/menu.c 
> gnome-panel-2.16.1-hacked/gnome-panel/menu.c
> --- gnome-panel-2.16.1/gnome-panel/menu.c     2006-11-16 01:36:14.666344000 
> +1300
> +++ gnome-panel-2.16.1-hacked/gnome-panel/menu.c      2006-11-16 
> 01:39:21.692923000 +1300
> @@ -1799,13 +1799,93 @@
>       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_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;
> +        GtkRecentManager *recent_view;
>  
>       if (!g_object_get_data (G_OBJECT (main_menu),
>                               "panel-menu-needs-appending"))
> @@ -1814,27 +1894,36 @@
>       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));
> -     }
> -
> -     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);
> -     gtk_menu_shell_append (GTK_MENU_SHELL (main_menu), item);
> -     gtk_widget_show (item);
> +        recent_view = NULL;
> +        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);
>  }
> @@ -1844,12 +1933,12 @@
>  {
>       GtkWidget *main_menu;
>  
> -     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 */
> +        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 */
>  
> -     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;
>  }
> diff -urN gnome-panel-2.16.1/gnome-panel/menu.h 
> gnome-panel-2.16.1-hacked/gnome-panel/menu.h
> --- gnome-panel-2.16.1/gnome-panel/menu.h     2006-02-13 02:33:11.000000000 
> +1300
> +++ gnome-panel-2.16.1-hacked/gnome-panel/menu.h      2006-11-16 
> 01:39:24.265211000 +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.16.1/gnome-panel/panel-menu-bar.c 
> gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-bar.c
> --- gnome-panel-2.16.1/gnome-panel/panel-menu-bar.c   2006-11-16 
> 01:36:14.694844000 +1300
> +++ gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-bar.c    2006-11-16 
> 01:39:35.074318000 +1300
> @@ -190,6 +190,8 @@
>       menubar->priv->info = NULL;
>  
>       menubar->priv->applications_menu = create_applications_menu 
> ("applications.menu", 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,
> diff -urN gnome-panel-2.16.1/gnome-panel/panel-menu-items.c 
> gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-items.c
> --- gnome-panel-2.16.1/gnome-panel/panel-menu-items.c 2006-11-16 
> 01:36:14.832896000 +1300
> +++ gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-items.c  2006-11-16 
> 01:39:41.240794000 +1300
> @@ -120,7 +120,7 @@
>       g_free (url);
>  }
>   
> -static void
> +void
>  panel_menu_items_append_from_desktop (GtkWidget *menu,
>                                     char      *path,
>                                     char      *force_name)
> @@ -562,15 +562,6 @@
>  
>       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)) {
> @@ -625,15 +616,6 @@
>                                              item);
>       }
>  
> -     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);
> -
>       return places_menu;
>  }
>  
> @@ -682,38 +664,65 @@
>       panel_place_menu_item_recreate_menu (place_menu);
>  }
>  
> +static 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);
> +
> +        gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
> +
> +        return item;
> +}
> +
>  static void
>  panel_desktop_menu_item_append_menu (GtkWidget            *menu,
>                                    PanelDesktopMenuItem *parent)
>  {
> -     gboolean  add_separator;
> -     GList    *children;
> -
> -     if (!g_object_get_data (G_OBJECT (menu), "panel-menu-needs-appending"))
> -             return;
> +        GtkWidget *item;
> +        GtkRecentManager *recent_view;
>  
> -     g_object_set_data (G_OBJECT (menu), "panel-menu-needs-appending", NULL);
> +        if (!g_object_get_data (G_OBJECT (menu), 
> "panel-menu-needs-appending"))
> +                return;
>  
> -     add_separator = FALSE;
> -     children = gtk_container_get_children (GTK_CONTAINER (menu));
> +        g_object_set_data (G_OBJECT (menu), "panel-menu-needs-appending", 
> NULL);
>  
> -     if (children != NULL) {
> -             GList *child;
> +        item = add_xdg_menu (_("Preferences"), "preferences.menu", 
> "gnome-settings");
> +        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
> +        gtk_widget_show (item);
>  
> -             child = children;
> -             while (child->next != NULL)
> -                     child = child->next;
> +        item = add_xdg_menu (_("Administration"), "settings.menu", 
> "gnome-system");
> +        gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); 
> +        gtk_widget_show (item);
>  
> -             add_separator = !GTK_IS_SEPARATOR (GTK_WIDGET (child->data));
> -     }
> +     add_menu_separator (menu);
>  
> -     g_list_free (children);
> +        recent_view = NULL;
> +        panel_recent_append_documents_menu (menu, recent_view);
> +        panel_menu_items_append_from_desktop (menu,
> +                                              "gnome-search-tool.desktop",
> +                                              NULL);
>  
> -     if (add_separator)
> -             add_menu_separator (menu);
> +        add_menu_separator (menu);
>  
>       panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL);
> -     panel_menu_items_append_from_desktop (menu, "gnome-about.desktop", 
> NULL);
>  
>       if (parent->priv->append_lock_logout)
>               panel_menu_items_append_lock_logout (menu);
> @@ -724,7 +733,11 @@
>  {
>       GtkWidget *desktop_menu;
>  
> -     desktop_menu = create_applications_menu ("settings.menu", NULL);
> +        desktop_menu = create_empty_menu ();
> +
> +        g_object_set_data (G_OBJECT (desktop_menu),
> +                           "panel-menu-needs-appending",
> +                           GUINT_TO_POINTER (TRUE));
>  
>       g_signal_connect (desktop_menu, "show",
>                         G_CALLBACK (panel_desktop_menu_item_append_menu),
> diff -urN gnome-panel-2.16.1/gnome-panel/panel-menu-items.h 
> gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-items.h
> --- gnome-panel-2.16.1/gnome-panel/panel-menu-items.h 2006-07-25 
> 02:50:32.000000000 +1200
> +++ gnome-panel-2.16.1-hacked/gnome-panel/panel-menu-items.h  2006-11-16 
> 01:39:44.563411000 +1300
> @@ -90,7 +90,9 @@
>  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
>  
>  #endif /* __PANEL_MENU_ITEMS_H__ */
> diff -urN gnome-panel-2.16.1/gnome-panel/panel-recent.c 
> gnome-panel-2.16.1-hacked/gnome-panel/panel-recent.c
> --- gnome-panel-2.16.1/gnome-panel/panel-recent.c     2006-08-19 
> 03:10:10.000000000 +1200
> +++ gnome-panel-2.16.1-hacked/gnome-panel/panel-recent.c      2006-11-16 
> 01:39:50.120306000 +1300
> @@ -233,11 +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);
> -
> -     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);
> +             g_object_get (manager, "size", &size, NULL);
> +        }
>       gtk_widget_set_sensitive (menu_item, size > 0);
>  
>       add_menu_separator (recent_menu);

Reply via email to