clutter/evdev: Ignore unknown touch points

We might receive touch events for unknown touch points, for example
when starting mutter while touching the screen (resulting in no
touch-down event ever being received). Avoid crashing when this happens
by just dropping these events on the floor.

https://bugzilla.gnome.org/show_bug.cgi?id=791371
This commit is contained in:
Jonas Ådahl 2017-12-11 18:22:21 +08:00
parent 5f05112b9a
commit 4e3b26d2ed

View File

@ -1459,6 +1459,8 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
slot = libinput_event_touch_get_slot (touch_event); slot = libinput_event_touch_get_slot (touch_event);
time_us = libinput_event_touch_get_time_usec (touch_event); time_us = libinput_event_touch_get_time_usec (touch_event);
touch_state = clutter_seat_evdev_get_touch (seat, slot); touch_state = clutter_seat_evdev_get_touch (seat, slot);
if (!touch_state)
break;
notify_touch_event (device, CLUTTER_TOUCH_END, time_us, slot, notify_touch_event (device, CLUTTER_TOUCH_END, time_us, slot,
touch_state->coords.x, touch_state->coords.y); touch_state->coords.x, touch_state->coords.y);
@ -1497,6 +1499,9 @@ process_device_event (ClutterDeviceManagerEvdev *manager_evdev,
stage_height); stage_height);
touch_state = clutter_seat_evdev_get_touch (seat, slot); touch_state = clutter_seat_evdev_get_touch (seat, slot);
if (!touch_state)
break;
touch_state->coords.x = x; touch_state->coords.x = x;
touch_state->coords.y = y; touch_state->coords.y = y;