[Xfce4-commits] <xfce4-panel:master> Don't handle grabs on the window from menu's.

Nick Schermer noreply at xfce.org
Sun Jul 25 15:32:01 CEST 2010


Updating branch refs/heads/master
         to 3ef0c0c04c609d9ca55279a7b74a96a848ed710c (commit)
       from 62e842ad4fff5fa64d3ab224e3a8845a64133b44 (commit)

commit 3ef0c0c04c609d9ca55279a7b74a96a848ed710c
Author: Nick Schermer <nick at xfce.org>
Date:   Sun Jul 25 15:27:17 2010 +0200

    Don't handle grabs on the window from menu's.

 panel/panel-window.c |   34 ++++++++++++++++++++++++++--------
 1 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/panel/panel-window.c b/panel/panel-window.c
index fda3a23..28b5ef7 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -95,7 +95,7 @@ static gboolean     panel_window_button_press_event         (GtkWidget        *w
 static gboolean     panel_window_button_release_event       (GtkWidget        *widget,
                                                              GdkEventButton   *event);
 static void         panel_window_grab_notify                (GtkWidget        *widget,
-                                                             gboolean         was_grabbed);
+                                                             gboolean          was_grabbed);
 static void         panel_window_size_request               (GtkWidget        *widget,
                                                              GtkRequisition   *requisition);
 static void         panel_window_size_allocate              (GtkWidget        *widget,
@@ -264,6 +264,7 @@ struct _PanelWindow
   AutohideState        autohide_state;
   guint                autohide_timeout_id;
   gint                 autohide_block;
+  gint                 autohide_grab_block;
 
   /* popup/down delay from gtk style */
   gint                 popup_delay;
@@ -430,6 +431,7 @@ panel_window_init (PanelWindow *window)
   window->autohide_state = AUTOHIDE_DISABLED;
   window->autohide_timeout_id = 0;
   window->autohide_block = 0;
+  window->autohide_grab_block = 0;
   window->popup_delay = DEFAULT_POPUP_DELAY;
   window->popdown_delay = DEFAULT_POPDOWN_DELAY;
   window->base_x = -1;
@@ -1005,14 +1007,30 @@ panel_window_grab_notify (GtkWidget *widget,
                           gboolean   was_grabbed)
 {
   PanelWindow *window = PANEL_WINDOW (widget);
+  GtkWidget   *current;
 
-  /* avoid hiding the panel when the window is grabbed. this
-   * (for example) happens when the user drags in the pager plugin
-   * see bug #4597 */
-  if (was_grabbed)
-    panel_window_thaw_autohide (window);
-  else
-    panel_window_freeze_autohide (window);
+  current = gtk_grab_get_current ();
+  if (GTK_IS_MENU_SHELL (current))
+    {
+      /* don't act on menu grabs, they should be registered through the
+       * plugin if they should block autohide */
+      window->autohide_grab_block++;
+    }
+  else if (window->autohide_grab_block > 0)
+    {
+      /* drop previous menu block */
+      window->autohide_grab_block--;
+    }
+  else if (window->autohide_grab_block == 0)
+    {
+      /* avoid hiding the panel when the window is grabbed. this
+       * (for example) happens when the user drags in the pager plugin
+       * see bug #4597 */
+      if (was_grabbed)
+        panel_window_thaw_autohide (window);
+      else
+        panel_window_freeze_autohide (window);
+    }
 }
 
 



More information about the Xfce4-commits mailing list