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