[PATCH libinput 1/9] touchpad: set ntouches for single-touch pads depending on key bits
Peter Hutterer
peter.hutterer at who-t.net
Thu Mar 27 23:23:50 PDT 2014
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.hutterer at who-t.net>
---
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.8.5.3
More information about the wayland-devel
mailing list