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 <[email protected]>
---
 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 35d0d85..f45d6bb 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 64bdd44..28a46bd 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);
 
-- 
2.4.3

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to