On Wed, 2006-11-15 at 14:16 +0000, Darren Kenny wrote:
> 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,

        Yes, I made those alacarte related patches so that it can work on
Solaris without FAM. They are 

alacarte-01-force-reload.diff
gnome-menus-04-support-alacarte.diff
gnome-panel-14-support-alacarte.diff

And I have sent them for review before. QA has verified these patches
are working.

        Any problems, please let me know.

Harry

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