diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c index c7aeb29988..7276a3043d 100644 --- a/gtk/gtkgesture.c +++ b/gtk/gtkgesture.c @@ -698,9 +698,6 @@ gtk_gesture_handle_event (GtkEventController *controller, { gboolean was_claimed; - was_claimed = - gtk_gesture_get_sequence_state (gesture, sequence) == GTK_EVENT_SEQUENCE_CLAIMED; - if (_gtk_gesture_update_point (gesture, event, FALSE)) { if (was_recognized && @@ -710,6 +707,9 @@ gtk_gesture_handle_event (GtkEventController *controller, _gtk_gesture_remove_point (gesture, event); } + was_claimed = + gtk_gesture_get_sequence_state (gesture, sequence) == GTK_EVENT_SEQUENCE_CLAIMED; + return was_claimed && was_recognized; } else if (event_type == GDK_MOTION_NOTIFY || diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8b67e62ec1..6f324522c2 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2503,12 +2503,20 @@ _gtk_widget_emulate_press (GtkWidget *widget, { GtkWidget *event_widget, *next_child, *parent; GdkEvent *press; + gdouble x, y; event_widget = gtk_get_event_target ((GdkEvent *) event); if (event_widget == widget) return; + gdk_event_get_coords (event, &x, &y); + gtk_widget_translate_coordinatesf (event_widget, + gtk_widget_get_toplevel (event_widget), + x, y, + &x, &y); + gdk_event_set_coords (event, x, y); + if (event->any.type == GDK_TOUCH_BEGIN || event->any.type == GDK_TOUCH_UPDATE || event->any.type == GDK_TOUCH_END)