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 <[email protected]> --- 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 8c28ff7..e9870ad 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1495,10 +1495,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 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
