]> Pileus Git - ~andy/gtk/commitdiff
call gdk_flush() after showing the menu so we can definitely grab on it.
authorMichael Natterer <mitch@imendio.com>
Tue, 6 Nov 2007 14:23:56 +0000 (14:23 +0000)
committerMichael Natterer <mitch@src.gnome.org>
Tue, 6 Nov 2007 14:23:56 +0000 (14:23 +0000)
2007-11-06  Michael Natterer  <mitch@imendio.com>

* 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.

svn path=/trunk/; revision=18969

ChangeLog
gtk/gtkmenu.c

index 1ac8f29cb777a715b2d30b0262b0879163c2e189..42190c4c230b4d1c02e821beb6f98545a2495869 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-11-06  Michael Natterer  <mitch@imendio.com>
+
+       * 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.
+
 2007-11-06  Michael Natterer  <mitch@imendio.com>
 
        * gtk/gtkwidget.c (gtk_widget_keynav_failed): fixed docs.
index deb3a46c5193dd237dcb0ba2b243d70c1fa27675..354ab21875f2259bcdf2df8d86656ee4800cab78 100644 (file)
@@ -1449,6 +1449,13 @@ gtk_menu_popup (GtkMenu              *menu,
    */
   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 ();
+
   if (xgrab_shell == widget)
     popup_grab_on_window (widget->window, activate_time, grab_keyboard); /* Should always succeed */
   gtk_grab_add (GTK_WIDGET (menu));