From: Peter Hutterer Date: Tue, 15 Apr 2014 12:27:58 +0000 (+0200) Subject: touchpad: set ntouches for single-touch pads depending on key bits X-Git-Tag: 0.3.0~39^2~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b089fbd67951d33c1031316813d768316262b5c;p=platform%2Fupstream%2Flibinput.git touchpad: set ntouches for single-touch pads depending on key bits 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 Signed-off-by: Hans de Goede Reviewed-by: Jonas Ã…dahl Reviewed-by: Hans de Goede --- 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));