From: Peter Hutterer <peter.hutte...@who-t.net>

A single-touch touchpad that provides BTN_TOOL_TRIPLETAP has 3 touches, etc.
There aren't a lot of these out there, but some touchpads don't have slots but
do provide two- or three-finger detection.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
Signed-off-by: Hans de Goede <hdego...@redhat.com>
---
 src/evdev-mt-touchpad.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index bbbd8f3..8021db2 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -715,9 +715,29 @@ tp_init_slots(struct tp_dispatch *tp,
                tp->slot = absinfo->value;
                tp->has_mt = true;
        } else {
-               tp->ntouches = 5; /* FIXME: based on DOUBLETAP, etc. */
+               struct map {
+                       unsigned int code;
+                       int ntouches;
+               } max_touches[] = {
+                       { BTN_TOOL_QUINTTAP, 5 },
+                       { BTN_TOOL_QUADTAP, 4 },
+                       { BTN_TOOL_TRIPLETAP, 3 },
+                       { BTN_TOOL_DOUBLETAP, 2 },
+               };
+               struct map *m;
+
                tp->slot = 0;
                tp->has_mt = false;
+               tp->ntouches = 1;
+
+               ARRAY_FOR_EACH(max_touches, m) {
+                       if (libevdev_has_event_code(device->evdev,
+                                                   EV_KEY,
+                                                   m->code)) {
+                               tp->ntouches = m->ntouches;
+                               break;
+                       }
+               }
        }
        tp->touches = calloc(tp->ntouches,
                             sizeof(struct tp_touch));
-- 
1.9.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to