diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 5db6c5799f..a27fae9f46 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -9481,6 +9481,7 @@ proxy_button_event (GdkEvent *source_event, GdkWindow *parent; GdkEvent *event; GdkPointerWindowInfo *pointer_info; + GdkDeviceGrabInfo *pointer_grab; guint state; guint32 time_; GdkEventType type; @@ -9506,11 +9507,14 @@ proxy_button_event (GdkEvent *source_event, sequence = gdk_event_get_event_sequence (source_event); pointer_info = _gdk_display_get_pointer_info (display, device); + pointer_grab = _gdk_display_has_device_grab (display, device, serial); if ((type == GDK_BUTTON_PRESS || type == GDK_TOUCH_BEGIN) && !source_event->any.send_event && - _gdk_display_has_device_grab (display, device, serial) == NULL) + (!pointer_grab || + (type == GDK_TOUCH_BEGIN && pointer_grab->implicit && + !_gdk_event_get_pointer_emulated (source_event)))) { pointer_window = _gdk_window_find_descendant_at (toplevel_window,