From: Peter Hutterer Date: Thu, 11 Jun 2015 06:31:00 +0000 (+1000) Subject: touchpad: make the hysteresis dependent on physical distance X-Git-Tag: 0.18.0~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f13fbc96e84b2bb78bb61886d79aaaeaf8a9b4a1;p=platform%2Fupstream%2Flibinput.git 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 --- diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 34cc85d4..c82d7339 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;