[PATCH libinput 1/6] touchpad: Clear touches being the pointer when doing 2 finger scrolling

Hans de Goede hdegoede at redhat.com
Fri May 23 07:06:22 PDT 2014


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 <hdegoede at redhat.com>
---
 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 89cebd5..040939b 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 959978e..dc2e25b 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);
 
-- 
1.9.3



More information about the wayland-devel mailing list