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 <hdego...@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 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel