[maemo-commits] [maemo-commits] r15243 - in projects/haf/trunk/hildon-1: . examples src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Mar 3 10:00:36 EET 2008
Author: herzi
Date: 2008-03-03 10:00:31 +0200 (Mon, 03 Mar 2008)
New Revision: 15243

Modified:
   projects/haf/trunk/hildon-1/ChangeLog
   projects/haf/trunk/hildon-1/examples/hildon-window-menu-example.c
   projects/haf/trunk/hildon-1/src/hildon-window.c
Log:
2008-03-03  Sven Herzberg  <sven at imendio.com>

	Fixes: MB#1220: HildonWindow should take GtkMenu accel_group into account

	* examples/hildon-window-menu-example.c: (main): extended the window
	menu example to serve as a testcase for automatically added
	accelerator groups, too
	* src/hildon-window.c: (hildon_window_add_accel_group),
	(hildon_window_set_menu): added patch by Tommi Komulainen


Modified: projects/haf/trunk/hildon-1/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-1/ChangeLog	2008-03-03 07:22:36 UTC (rev 15242)
+++ projects/haf/trunk/hildon-1/ChangeLog	2008-03-03 08:00:31 UTC (rev 15243)
@@ -1,5 +1,15 @@
 2008-03-03  Sven Herzberg  <sven at imendio.com>
 
+	Fixes: MB#1220: HildonWindow should take GtkMenu accel_group into account
+
+	* examples/hildon-window-menu-example.c: (main): extended the window
+	menu example to serve as a testcase for automatically added
+	accelerator groups, too
+	* src/hildon-window.c: (hildon_window_add_accel_group),
+	(hildon_window_set_menu): added patch by Tommi Komulainen
+
+2008-03-03  Sven Herzberg  <sven at imendio.com>
+
 	Fixes: MB#1276: wrong allocators used in hildon_window_get_borders
 
 	* src/hildon-window.c: (hildon_window_get_borders): don't imply any

Modified: projects/haf/trunk/hildon-1/examples/hildon-window-menu-example.c
===================================================================
--- projects/haf/trunk/hildon-1/examples/hildon-window-menu-example.c	2008-03-03 07:22:36 UTC (rev 15242)
+++ projects/haf/trunk/hildon-1/examples/hildon-window-menu-example.c	2008-03-03 08:00:31 UTC (rev 15243)
@@ -40,13 +40,19 @@
     hildon_program_add_window (program, HILDON_WINDOW (window));
 
     GtkMenu *menu = GTK_MENU (gtk_menu_new ());
-    GtkWidget *menu_item = gtk_menu_item_new_with_label ("Test item");
+    GtkAccelGroup *group = gtk_accel_group_new ();
+    gtk_menu_set_accel_group (menu, group);
+    GtkWidget *menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT,
+		    					       gtk_menu_get_accel_group (menu));
     gtk_widget_show (menu_item);
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
 
     hildon_window_set_main_menu (HILDON_WINDOW (window), menu);
 
-    g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
+    g_signal_connect_swapped (menu_item, "activate",
+		    	      G_CALLBACK (gtk_object_destroy), window);
+
+    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
     gtk_widget_show_all (GTK_WIDGET (window));
     
     gtk_main ();

Modified: projects/haf/trunk/hildon-1/src/hildon-window.c
===================================================================
--- projects/haf/trunk/hildon-1/src/hildon-window.c	2008-03-03 07:22:36 UTC (rev 15242)
+++ projects/haf/trunk/hildon-1/src/hildon-window.c	2008-03-03 08:00:31 UTC (rev 15243)
@@ -1817,6 +1817,24 @@
     return GTK_MENU (priv->menu);
 }
 
+/* Since we've been asking developers to call gtk_window_add_accel_group()
+ * themselves, do not trigger criticals by trying it again.
+ */
+static void
+hildon_window_add_accel_group (HildonWindow *self,
+			       GtkAccelGroup *accel_group)
+{
+    GSList *groups, *l;
+
+    groups = gtk_accel_groups_from_object (G_OBJECT (self));
+    for (l = groups; l != NULL; l = l->next)
+      if (l->data == (gpointer)accel_group)
+	/* Maybe print a warning here? */
+	return;
+
+    gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
+}
+
 /**
  * hildon_window_set_main_menu:
  * @self: A #HildonWindow
@@ -1835,6 +1853,7 @@
 			     GtkMenu     * menu)
 {
     HildonWindowPrivate *priv;
+    GtkAccelGroup *accel_group;
 
     g_return_if_fail (HILDON_IS_WINDOW (self));
 
@@ -1842,6 +1861,10 @@
 
     if (priv->menu != NULL)
     {
+	accel_group = gtk_menu_get_accel_group (GTK_MENU (priv->menu));
+	if (accel_group != NULL)
+	    gtk_window_remove_accel_group (GTK_WINDOW (self), accel_group);
+
         gtk_menu_detach (GTK_MENU (priv->menu));
         g_object_unref (priv->menu);
     }
@@ -1852,6 +1875,10 @@
         gtk_widget_set_name (priv->menu, "menu_force_with_corners");
         gtk_menu_attach_to_widget (GTK_MENU (priv->menu), GTK_WIDGET (self), &detach_menu_func);
         g_object_ref (GTK_MENU (priv->menu));
+
+	accel_group = gtk_menu_get_accel_group (GTK_MENU (priv->menu));
+	if (accel_group != NULL)
+	    hildon_window_add_accel_group (self, accel_group);
     }
 }
 


More information about the maemo-commits mailing list