From f19c3896d03a4b1fe661aa13a5dffcb181ec157b Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Thu, 27 Jun 2013 19:01:14 +0200 Subject: [PATCH] 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 file changed, 12 insertions(+) diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 5bc426bdaa..01366b7a6b 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;