/jds/bin/diff -uprN gnome-panel-2.27.92.old/gnome-panel/menu.c gnome-panel-2.27.92/gnome-panel/menu.c
--- gnome-panel-2.27.92.old/gnome-panel/menu.c 2009-09-14 13:54:27.541171000 +0100
+++ gnome-panel-2.27.92/gnome-panel/menu.c 2009-09-14 13:55:13.776722000 +0100
@@ -1821,6 +1821,53 @@ main_menu_append (GtkWidget *main_menu,
panel_menu_items_append_lock_logout (main_menu);
}
+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_ICON_RUN, 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 *
create_main_menu (PanelWidget *panel)
{
/jds/bin/diff -uprN gnome-panel-2.27.92.old/gnome-panel/menu.h gnome-panel-2.27.92/gnome-panel/menu.h
--- gnome-panel-2.27.92.old/gnome-panel/menu.h 2009-09-14 13:54:27.545416000 +0100
+++ gnome-panel-2.27.92/gnome-panel/menu.h 2009-09-14 13:55:13.778639000 +0100
@@ -69,6 +69,8 @@ GtkWidget *add_menu_separator (Gt
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
/jds/bin/diff -uprN gnome-panel-2.27.92.old/gnome-panel/panel-menu-items.c gnome-panel-2.27.92/gnome-panel/panel-menu-items.c
--- gnome-panel-2.27.92.old/gnome-panel/panel-menu-items.c 2009-09-14 13:54:27.547045000 +0100
+++ gnome-panel-2.27.92/gnome-panel/panel-menu-items.c 2009-09-14 13:55:13.788961000 +0100
@@ -1173,6 +1173,7 @@ panel_desktop_menu_item_append_menu (Gtk
add_menu_separator (menu);
panel_menu_items_append_from_desktop (menu, "yelp.desktop", NULL, FALSE);
+ panel_menu_items_append_from_desktop (menu, "os-about.desktop", NULL, FALSE);
panel_menu_items_append_from_desktop (menu, "gnome-about.desktop", NULL, FALSE);
if (parent->priv->append_lock_logout)
/jds/bin/diff -uprN gnome-panel-2.27.92.old/gnome-panel/panel-menu-bar.c gnome-panel-2.27.92/gnome-panel/panel-menu-bar.c
--- gnome-panel-2.27.92.old/gnome-panel/panel-menu-bar.c 2009-09-22 14:37:48.346822883 +0100
+++ gnome-panel-2.27.92/gnome-panel/panel-menu-bar.c 2009-09-22 14:51:43.685055758 +0100
@@ -154,13 +154,33 @@ panel_menubar_recreate_menus (PanelMenuB
(PanelDesktopMenuItem *)menubar->priv->desktop_item);
panel_menu_bar_parent_set ((GtkWidget *)menubar, NULL);
+ g_object_set_data (G_OBJECT (menubar->priv->applications_menu),
+ "panel-menu-needs-appending", TRUE);
}
}
static void
+panel_menu_bar_handle_gmenu_change(GMenuTree *tree,
+ GtkWidget *menu)
+{
+ g_object_set_data (G_OBJECT (menu),
+ "panel-menu-needs-appending", TRUE);
+}
+
+static void
+panel_menu_bar_remove_gmenu_monitor(GtkWidget *menu,
+ GMenuTree *tree)
+{
+ gmenu_tree_remove_monitor (tree,
+ (GMenuTreeChangedFunc) panel_menu_bar_handle_gmenu_change,
+ menu);
+}
+
+static void
panel_menu_bar_init (PanelMenuBar *menubar)
{
GtkWidget *image;
+ GMenuTree *tree;
menubar->priv = PANEL_MENU_BAR_GET_PRIVATE (menubar);
@@ -168,6 +188,20 @@ panel_menu_bar_init (PanelMenuBar *menub
menubar->priv->applications_menu = create_applications_menu ("applications.menu", NULL, TRUE);
+ tree = gmenu_tree_lookup ("applications.menu", GMENU_TREE_FLAGS_NONE);
+
+ gmenu_tree_add_monitor (tree,
+ (GMenuTreeChangedFunc) panel_menu_bar_handle_gmenu_change,
+ menubar->priv->applications_menu);
+ g_signal_connect(menubar->priv->applications_menu, "destroy",
+ G_CALLBACK (panel_menu_bar_remove_gmenu_monitor), tree);
+ gmenu_tree_unref (tree);
+
+ 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 = panel_image_menu_item_new ();
gtk_menu_item_set_label (GTK_MENU_ITEM (menubar->priv->applications_item),
_("Applications"));