Add touch_frame events to Weston 1.5.0
[AGL/meta-agl.git] / meta-agl / recipes-graphics / wayland / weston / 0001-Adapt-changes-made-in-libinput-src-evdev.c-for-touch.patch
diff --git a/meta-agl/recipes-graphics/wayland/weston/0001-Adapt-changes-made-in-libinput-src-evdev.c-for-touch.patch b/meta-agl/recipes-graphics/wayland/weston/0001-Adapt-changes-made-in-libinput-src-evdev.c-for-touch.patch
new file mode 100644 (file)
index 0000000..1bb9253
--- /dev/null
@@ -0,0 +1,65 @@
+From c4633014fff25d32926129a8b028124c6338bb2b Mon Sep 17 00:00:00 2001
+From: Louai Al-Khanji <louai.al-khanji@theqtcompany.com>
+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
+