diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2014-05-19 13:50:21 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2014-05-19 14:00:07 +0200 |
commit | cacccf7a3a5686c9885324839dadaf88a9591587 (patch) | |
tree | 6b4286c486aa392dacbff9b999bcbb7915062d46 /gtk/gtkpopover.c | |
parent | e2cd59b7313a28f74104f8f9c49412042578c7bf (diff) | |
download | gtk+-cacccf7a3a5686c9885324839dadaf88a9591587.tar.gz |
popover: Check for uncaught button events from children
And deal correctly with those as a click within the popover.
https://bugzilla.gnome.org/show_bug.cgi?id=727994
Diffstat (limited to 'gtk/gtkpopover.c')
-rw-r--r-- | gtk/gtkpopover.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index 8e6059eaa7..885b691f08 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -1162,13 +1162,15 @@ gtk_popover_button_release (GtkWidget *widget, GdkEventButton *event) { GtkPopover *popover = GTK_POPOVER (widget); - GtkWidget *child; + GtkWidget *child, *event_widget; child = gtk_bin_get_child (GTK_BIN (widget)); if (!popover->priv->button_pressed) return GDK_EVENT_PROPAGATE; + event_widget = gtk_get_event_widget ((GdkEvent *) event); + if (child && event->window == gtk_widget_get_window (widget)) { GtkAllocation child_alloc; @@ -1181,7 +1183,7 @@ gtk_popover_button_release (GtkWidget *widget, event->y > child_alloc.y + child_alloc.height) gtk_widget_hide (widget); } - else + else if (!gtk_widget_is_ancestor (event_widget, widget)) gtk_widget_hide (widget); return GDK_EVENT_PROPAGATE; |