[gtk+] menushell: don't activate a menu entry when opening a big menu



commit f19c3896d03a4b1fe661aa13a5dffcb181ec157b
Author: Emilio Pozuelo Monfort <emilio pozuelo collabora co uk>
Date:   Thu Jun 27 19:01:14 2013 +0200

    menushell: don't activate a menu entry when opening a big menu
    
    If a menu is opened and it doesn't fit entirely below or above
    the menu bar, gtk+ will place it on top. The button release will
    then activate the popup item that happens to appear under the
    cursor. Avoid this by ignoring release events if they originated
    in the parent menu bar and the duration of the press was too short.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=703069

 gtk/gtkmenushell.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 5bc426b..01366b7 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -809,6 +809,18 @@ gtk_menu_shell_button_release (GtkWidget      *widget,
   GtkMenuShell *menu_shell = GTK_MENU_SHELL (widget);
   GtkMenuShellPrivate *priv = menu_shell->priv;
 
+  if (priv->parent_menu_shell &&
+      (event->time - GTK_MENU_SHELL (priv->parent_menu_shell)->priv->activate_time) < MENU_SHELL_TIMEOUT)
+    {
+      /* The button-press originated in the parent menu bar and we are
+       * a pop-up menu. It was a quick press-and-release so we don't want
+       * to activate an item but we leave the popup in place instead.
+       * https://bugzilla.gnome.org/show_bug.cgi?id=703069
+       */
+      GTK_MENU_SHELL (priv->parent_menu_shell)->priv->activate_time = 0;
+      return TRUE;
+    }
+
   if (priv->active)
     {
       GtkWidget *menu_item;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]