Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Staging:C
gtk3
gtk3-GtkMenuButton-protect-against-recursion.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gtk3-GtkMenuButton-protect-against-recursion.patch of Package gtk3
From 65f7fb04ad3cd59ac87ac13a3a59ac18c65c610c Mon Sep 17 00:00:00 2001 From: Carlos Garnacho <carlosg@gnome.org> Date: Thu, 23 Jul 2015 14:26:25 +0200 Subject: GtkMenuButton: explicitly protect against recursion The visibility toggling happening on ::click() relied implicitly on the popover animation, but breaks on disabled animations. The recursion happening within gtk_toggle_button_set_active() (which triggers ::clicked when changing state) makes this vfunc to run again, inverting the visibility of the popover in result. Fix this by explicitly checking about recursion, we want the button to be toggled to the right state, but we don't want the callback running again. https://bugzilla.gnome.org/show_bug.cgi?id=752577 --- gtk/gtkmenubutton.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 2126087..fad5cb6 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -133,6 +133,7 @@ struct _GtkMenuButtonPrivate GtkArrowType arrow_type; gboolean use_popover; guint press_handled : 1; + guint in_click : 1; }; enum @@ -429,6 +430,11 @@ gtk_menu_button_clicked (GtkButton *button) GtkMenuButtonPrivate *priv = menu_button->priv; gboolean active; + if (priv->in_click) + return; + + priv->in_click = TRUE; + if (priv->menu) { active = !gtk_widget_get_visible (priv->menu); @@ -464,6 +470,7 @@ gtk_menu_button_clicked (GtkButton *button) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), active); gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (button)); + priv->in_click = FALSE; } static void -- cgit v0.11.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor