[maemo-commits] [maemo-commits] r14733 - in projects/haf/trunk/gtk+: . gtk

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Nov 7 16:43:07 EET 2007
Author: mitch
Date: 2007-11-07 16:43:02 +0200 (Wed, 07 Nov 2007)
New Revision: 14733

Modified:
   projects/haf/trunk/gtk+/ChangeLog
   projects/haf/trunk/gtk+/gtk/gtkmenu.c
Log:
2007-11-07  Michael Natterer  <mitch at imendio.com>

	Merge from upstream:

	* gtk/gtkmenu.c (gtk_menu_popup): call gdk_flush() after showing
	the menu so we can definitely grab on it. Grab failure found by
	Xan Lopez.

	Change above merge to use gtk_widget_show_now() instead because
	maemo menus are toplevels not popups. Remove debugging output
	about failed grabs.



Modified: projects/haf/trunk/gtk+/ChangeLog
===================================================================
--- projects/haf/trunk/gtk+/ChangeLog	2007-11-07 12:15:20 UTC (rev 14732)
+++ projects/haf/trunk/gtk+/ChangeLog	2007-11-07 14:43:02 UTC (rev 14733)
@@ -1,3 +1,15 @@
+2007-11-07  Michael Natterer  <mitch at imendio.com>
+
+	Merge from upstream:
+
+	* gtk/gtkmenu.c (gtk_menu_popup): call gdk_flush() after showing
+	the menu so we can definitely grab on it. Grab failure found by
+	Xan Lopez.
+
+	Change above merge to use gtk_widget_show_now() instead because
+	maemo menus are toplevels not popups. Remove debugging output
+	about failed grabs.
+
 2007-11-02  Xan Lopez  <xan.lopez at nokia.com>
 
 	* gdk/gdkdisplay.c:

Modified: projects/haf/trunk/gtk+/gtk/gtkmenu.c
===================================================================
--- projects/haf/trunk/gtk+/gtk/gtkmenu.c	2007-11-07 12:15:20 UTC (rev 14732)
+++ projects/haf/trunk/gtk+/gtk/gtkmenu.c	2007-11-07 14:43:02 UTC (rev 14733)
@@ -1307,14 +1307,12 @@
 	return TRUE;
       else
 	{
-          g_warning ("popup_grab_on_window: couldn't grab keyboard");
 	  gdk_display_pointer_ungrab (gdk_drawable_get_display (window),
 				      activate_time);
 	  return FALSE;
 	}
     }
 
-  g_warning ("popup_grab_on_window: couldn't grab pointer");
   return FALSE;
 }
 
@@ -1461,7 +1459,7 @@
   if (xgrab_shell && xgrab_shell != widget)
     {
       if (popup_grab_on_window (xgrab_shell->window, activate_time, grab_keyboard))
-          GTK_MENU_SHELL (xgrab_shell)->have_xgrab = TRUE;
+        GTK_MENU_SHELL (xgrab_shell)->have_xgrab = TRUE;
 
 #ifdef MAEMO_CHANGES
       /* Maemo: enable rc-file theming */
@@ -1500,7 +1498,6 @@
        */
       menu_shell->parent_menu_shell = NULL;
       menu_grab_transfer_window_destroy (menu);
-      g_warning ("%gtk_menu_popup: exiting because we don't have grab");
       return;
     }
 
@@ -1605,8 +1602,22 @@
   /* Once everything is set up correctly, map the toplevel window on
      the screen.
    */
+#ifndef MAEMO_CHANGES
   gtk_widget_show (menu->toplevel);
 
+  /* flush the X event queue for the popup to become realized and
+   * mapped, since grabbing requires a mapped window. (this only works
+   * for popups, regular windows need gtk_widget_show_now() to sync
+   * with window manager interaction).
+   */
+  gdk_flush ();
+#else
+  /* on maemo, menus are ordinary toplevels, so gdk_flush() will not work.
+   * do as above comment suggests instead.
+   */
+  gtk_widget_show_now (menu->toplevel);
+#endif /* MAEMO_CHANGES */
+
   if (xgrab_shell == widget)
     popup_grab_on_window (widget->window, activate_time, grab_keyboard); /* Should always succeed */
   gtk_grab_add (GTK_WIDGET (menu));


More information about the maemo-commits mailing list