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> Reviewed-by: Jonas Ã…dahl <jad...@gmail.com> Reviewed-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 109441d..b4a89e3 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