summaryrefslogtreecommitdiff
path: root/gtk/gtkpopover.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-05-19 13:50:21 +0200
committerCarlos Garnacho <carlosg@gnome.org>2014-05-19 14:00:07 +0200
commitcacccf7a3a5686c9885324839dadaf88a9591587 (patch)
tree6b4286c486aa392dacbff9b999bcbb7915062d46 /gtk/gtkpopover.c
parente2cd59b7313a28f74104f8f9c49412042578c7bf (diff)
downloadgtk+-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.c6
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;