gdk: Ignore synthesized leave events out of touch events

Certain crossing modes notify about synthesized events, where
the pointer didn't really leave the window. Unsetting the stage
from the device at that time is incorrect, and will leave all
remaining touches unable to pick coordinates, so silently eaten
away.

https://bugzilla.gnome.org/show_bug.cgi?id=750496
This commit is contained in:
Carlos Garnacho 2015-06-06 20:10:13 +02:00 committed by Emmanuele Bassi
parent 2d5b5aa82a
commit 7ed3714a94

View File

@ -248,7 +248,10 @@ clutter_gdk_handle_event (GdkEvent *gdk_event)
clutter_event_set_source_device (event, source_device); clutter_event_set_source_device (event, source_device);
if (gdk_event->type == GDK_ENTER_NOTIFY) if (gdk_event->type == GDK_ENTER_NOTIFY)
_clutter_input_device_set_stage (clutter_event_get_device (event), stage); _clutter_input_device_set_stage (clutter_event_get_device (event), stage);
else else if (gdk_event->type == GDK_LEAVE_NOTIFY &&
gdk_event->crossing.mode != GDK_CROSSING_TOUCH_BEGIN &&
gdk_event->crossing.mode != GDK_CROSSING_TOUCH_END &&
gdk_event->crossing.mode != GDK_CROSSING_DEVICE_SWITCH)
_clutter_input_device_set_stage (clutter_event_get_device (event), NULL); _clutter_input_device_set_stage (clutter_event_get_device (event), NULL);
CLUTTER_NOTE (EVENT, "Crossing %s [%.2f, %.2f]", CLUTTER_NOTE (EVENT, "Crossing %s [%.2f, %.2f]",
event->type == CLUTTER_ENTER ? "enter" : "leave", event->type == CLUTTER_ENTER ? "enter" : "leave",