patches/gnome-panel-08-launch-menu-indiana.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 20036 91e0e948a909
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.

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