From f13fbc96e84b2bb78bb61886d79aaaeaf8a9b4a1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 11 Jun 2015 16:31:00 +1000 Subject: [PATCH libinput] touchpad: make the hysteresis dependent on physical distance Some touchpads, e.g. the Cyapa in the Acer c720 have a small axis range ([0, 870], [0, 470]), so the diagonal/magic value yields a hysteresis margin of 1 device unit. On that device, that's one-tenth of a millimeter, causing pointer motion just by holding the finger. For touchpads that provide a physical resolution, set the hysteresis axes to 0.5mm and do away with the magic factor. https://bugzilla.redhat.com/show_bug.cgi?id=1230441 Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 34cc85d..c82d733 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1492,10 +1492,18 @@ tp_init(struct tp_dispatch *tp, EV_ABS, ABS_MT_DISTANCE); - tp->hysteresis_margin.x = - diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR; - tp->hysteresis_margin.y = - diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR; + if (device->abs.fake_resolution) { + tp->hysteresis_margin.x = + diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR; + tp->hysteresis_margin.y = + diagonal / DEFAULT_HYSTERESIS_MARGIN_DENOMINATOR; + } else { + int res_x = tp->device->abs.absinfo_x->resolution, + res_y = tp->device->abs.absinfo_y->resolution; + + tp->hysteresis_margin.x = res_x/2; + tp->hysteresis_margin.y = res_y/2; + } if (tp_init_accel(tp, diagonal) != 0) return -1; -- 2.4.3