touchpad: mask out ABS_MT if we don't have or disable MT

Make sure the events we deal with are the ones we actually honor. This reduces
the chance that we accidentally process events we weren't event supposed to
get based on some earlier device decision.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
Peter Hutterer 2017-01-23 09:55:03 +10:00
parent ebeba8e8ff
commit 43352590f7

View file

@ -1749,6 +1749,16 @@ tp_sync_touch(struct tp_dispatch *tp,
libevdev_fetch_slot_value(evdev, slot, ABS_MT_DISTANCE, &t->distance);
}
static inline void
tp_disable_abs_mt(struct evdev_device *device)
{
struct libevdev *evdev = device->evdev;
unsigned int code;
for (code = ABS_MT_SLOT; code <= ABS_MAX; code++)
libevdev_disable_event_code(evdev, EV_ABS, code);
}
static bool
tp_init_slots(struct tp_dispatch *tp,
struct evdev_device *device)
@ -1804,6 +1814,9 @@ tp_init_slots(struct tp_dispatch *tp,
tp->has_mt = false;
}
if (!tp->has_mt)
tp_disable_abs_mt(device);
ARRAY_FOR_EACH(max_touches, m) {
if (libevdev_has_event_code(device->evdev,
EV_KEY,