From c4633014fff25d32926129a8b028124c6338bb2b Mon Sep 17 00:00:00 2001 From: Louai Al-Khanji Date: Wed, 19 Aug 2015 09:04:46 +0300 Subject: [PATCH 1/1] Adapt changes made in libinput/src/evdev.c for touch frame emission. --- src/evdev.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index 888dfbd..daa5d72 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -359,12 +359,36 @@ evdev_process_absolute(struct evdev_device *device, } } +static inline int +evdev_need_touch_frame(struct evdev_device *device) +{ + if (!(device->seat_caps & EVDEV_SEAT_TOUCH)) + return 0; + + switch (device->pending_event) { + case EVDEV_NONE: + case EVDEV_RELATIVE_MOTION: + break; + case EVDEV_ABSOLUTE_MT_DOWN: + case EVDEV_ABSOLUTE_MT_MOTION: + case EVDEV_ABSOLUTE_MT_UP: + case EVDEV_ABSOLUTE_TOUCH_DOWN: + case EVDEV_ABSOLUTE_TOUCH_UP: + case EVDEV_ABSOLUTE_MOTION: + return 1; + } + + return 0; +} + static void fallback_process(struct evdev_dispatch *dispatch, struct evdev_device *device, struct input_event *event, uint32_t time) { + int need_frame = 0; + switch (event->type) { case EV_REL: evdev_process_relative(device, event, time); @@ -376,7 +400,10 @@ fallback_process(struct evdev_dispatch *dispatch, evdev_process_key(device, event, time); break; case EV_SYN: + need_frame = evdev_need_touch_frame(device); evdev_flush_pending_event(device, time); + if (need_frame) + notify_touch_frame(device->seat); break; } } -- 2.1.4