From 3b73342e34196d355c07b89c109e8a91a9abf6ad Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 20 Jul 2015 11:13:55 +1000 Subject: [PATCH 1/2] touchpad: reduce 2fg scroll threshold to 2mm 3mm is too large, especially on fine-grained scroll motions. Since we already use the hysteresis to defuzz the current touchpad point, having a slower threshold here should not cause any adverse motions. This affects the pinch gestures too and needs a minor test adjustment. The atmel hover device's resolution is low enough that we trigger a >1 degree angle now, make the movement a bit more finegrained. https://bugs.freedesktop.org/show_bug.cgi?id=91364 Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad-gestures.c | 3 ++- test/gestures.c | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index a23b5ce1..a7231eb6 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -195,9 +195,10 @@ tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch) if (tp->semi_mt) move_threshold = TP_MM_TO_DPI_NORMALIZED(4); else - move_threshold = TP_MM_TO_DPI_NORMALIZED(3); + move_threshold = TP_MM_TO_DPI_NORMALIZED(2); delta = device_delta(touch->point, touch->gesture.initial); + normalized = tp_normalize_delta(tp, delta); if (normalized_length(normalized) < move_threshold) diff --git a/test/gestures.c b/test/gestures.c index 8b6639f3..b9d73257 100644 --- a/test/gestures.c +++ b/test/gestures.c @@ -287,16 +287,16 @@ START_TEST(gestures_spread) litest_touch_down(dev, 1, 50 - dir_x, 50 - dir_y); libinput_dispatch(li); - for (i = 0; i < 8; i++) { + for (i = 0; i < 15; i++) { litest_push_event_frame(dev); if (dir_x > 0.0) - dir_x += 3; + dir_x += 2; else if (dir_x < 0.0) - dir_x -= 3; + dir_x -= 2; if (dir_y > 0.0) - dir_y += 3; + dir_y += 2; else if (dir_y < 0.0) - dir_y -= 3; + dir_y -= 2; litest_touch_move(dev, 0, 50 + dir_x, From 9d0c7671229309d01b79f5736572b6eb874c550b Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 20 Jul 2015 11:24:17 +1000 Subject: [PATCH 2/2] touchpad: reduce unpin threshold to 1.5mm 3mm is too large, it makes the touchpad feel sluggish. We already take fuzz into account through the hysteresis and the real issue we have with the pointer moving on a click is _before_ the BTN_LEFT event comes in, not after. Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- src/evdev-mt-touchpad.c | 4 ++-- test/touchpad.c | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 35d0d853..f45d6bbc 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -438,8 +438,8 @@ tp_unpin_finger(struct tp_dispatch *tp, struct tp_touch *t) ydist = abs(t->point.y - t->pinned.center.y); ydist *= tp->buttons.motion_dist.y_scale_coeff; - /* 3mm movement -> unpin */ - if (hypot(xdist, ydist) >= 3.0) { + /* 1.5mm movement -> unpin */ + if (hypot(xdist, ydist) >= 1.5) { t->pinned.is_pinned = false; return; } diff --git a/test/touchpad.c b/test/touchpad.c index 64bdd440..28a46bd3 100644 --- a/test/touchpad.c +++ b/test/touchpad.c @@ -840,12 +840,19 @@ START_TEST(clickpad_finger_pin) struct libinput *li = dev->libinput; struct libevdev *evdev = dev->evdev; const struct input_absinfo *abs; + double w, h; + double dist; abs = libevdev_get_abs_info(evdev, ABS_MT_POSITION_X); ck_assert_notnull(abs); if (abs->resolution == 0) return; + if (libinput_device_get_size(dev->libinput_device, &w, &h) != 0) + return; + + dist = 100.0/max(w, h); + litest_drain_events(li); /* make sure the movement generates pointer events when @@ -859,9 +866,9 @@ START_TEST(clickpad_finger_pin) litest_button_click(dev, BTN_LEFT, true); litest_drain_events(li); - litest_touch_move_to(dev, 0, 50, 50, 51, 51, 10, 1); - litest_touch_move_to(dev, 0, 51, 51, 49, 49, 10, 1); - litest_touch_move_to(dev, 0, 49, 49, 50, 50, 10, 1); + litest_touch_move_to(dev, 0, 50, 50, 50 + dist, 50 + dist, 10, 1); + litest_touch_move_to(dev, 0, 50 + dist, 50 + dist, 50, 50, 10, 1); + litest_touch_move_to(dev, 0, 50, 50, 50 - dist, 50 - dist, 10, 1); litest_assert_empty_queue(li); @@ -869,9 +876,9 @@ START_TEST(clickpad_finger_pin) litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_BUTTON); /* still pinned after release */ - litest_touch_move_to(dev, 0, 50, 50, 51, 51, 10, 1); - litest_touch_move_to(dev, 0, 51, 51, 49, 49, 10, 1); - litest_touch_move_to(dev, 0, 49, 49, 50, 50, 10, 1); + litest_touch_move_to(dev, 0, 50, 50, 50 + dist, 50 + dist, 10, 1); + litest_touch_move_to(dev, 0, 50 + dist, 50 + dist, 50, 50, 10, 1); + litest_touch_move_to(dev, 0, 50, 50, 50 - dist, 50 - dist, 10, 1); litest_assert_empty_queue(li);