From 32397f0b72df71735179273aabd76e2752bd1148 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 17 Apr 2016 21:19:58 +0100 Subject: [PATCH] gdk: Make GDK_TOUCH_CANCEL be dealt with similarly to GDK_TOUCH_END We must emit the cancel event with the same semantics, and towards the GdkWindow that is currently under the touchpoint, so make proxy_button_event() deal with GDK_TOUCH_CANCEL. Fixes the GDK_TOUCH_CANCEL event being emitted only on the toplevel, which is usually non-sufficient. --- gdk/gdkwindow.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 60ed2ee586..66ebb9de36 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -7663,6 +7663,7 @@ is_button_type (GdkEventType type) type == GDK_BUTTON_RELEASE || type == GDK_TOUCH_BEGIN || type == GDK_TOUCH_END || + type == GDK_TOUCH_CANCEL || type == GDK_SCROLL; } @@ -9286,6 +9287,7 @@ proxy_button_event (GdkEvent *source_event, case GDK_TOUCH_BEGIN: case GDK_TOUCH_END: + case GDK_TOUCH_CANCEL: convert_toplevel_coords_to_window (event_win, toplevel_x, toplevel_y, &event->button.x, &event->button.y); @@ -9301,7 +9303,7 @@ proxy_button_event (GdkEvent *source_event, gdk_event_set_source_device (event, source_device); - if ((type == GDK_TOUCH_END && + if (((type == GDK_TOUCH_END || type == GDK_TOUCH_CANCEL) && _gdk_event_get_pointer_emulated (source_event)) && pointer_window == pointer_info->window_under_pointer && gdk_device_get_source (source_device) == GDK_SOURCE_TOUCHSCREEN)