From cee3a482f3a880ba20eef7c526ca3288703ed525 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 23 May 2014 16:06:22 +0200 Subject: [PATCH] touchpad: Clear touches being the pointer when doing 2 finger scrolling When doing 2 finger scrolling we don't want any spurious movement events after scrolling. touchpad_2fg_no_motion tests for this, but it lifts touch 0 (which is the pointer as it came down first) first, so it only catches the case where touch 1 suddenly gets promoted to being the pointer. However if touch 1 is lifted first, then touch 0 is still the pointer and will cause spurious movement events. Swap the 2 litest_touch_up calls to catch this (and make the test fail), and add code to clear the is_pointer flag on all touched when doing 2 finger scrolling to fix it again. Signed-off-by: Hans de Goede Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad.c | 4 ++++ test/touchpad.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 89cebd55..040939b6 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -479,6 +479,10 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint64_t time) return; } + /* Stop spurious MOTION events at the end of scrolling */ + tp_for_each_touch(tp, t) + t->is_pointer = false; + if (dy != 0.0 && (tp->scroll.direction & (1 << LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL))) { pointer_notify_axis(&tp->device->base, diff --git a/test/touchpad.c b/test/touchpad.c index 959978e5..dc2e25ba 100644 --- a/test/touchpad.c +++ b/test/touchpad.c @@ -74,8 +74,8 @@ START_TEST(touchpad_2fg_no_motion) litest_touch_down(dev, 1, 70, 20); litest_touch_move_to(dev, 0, 20, 20, 80, 80, 5); litest_touch_move_to(dev, 1, 70, 20, 80, 50, 5); - litest_touch_up(dev, 0); litest_touch_up(dev, 1); + litest_touch_up(dev, 0); libinput_dispatch(li);