[PATCH] touchpad: Only use slot 0 deltas for 2fg scrolling on semi-mt touchpads

Hans de Goede hdegoede at redhat.com
Fri Apr 24 07:49:36 PDT 2015


Some semi-mt model touchpads have a better accuracy for slot 0 then for
slot 1 (they only have 2), so on semi-mt models only use the movement of
the touch in slot 0 for 2fg scrolling, rather then the average movement of
the 2 touches.

This fixes 2fg scrolling being choppy / jumpy in some cases.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=89683
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
 src/evdev-mt-touchpad-gestures.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index d332186..57c07fe 100644
--- a/src/evdev-mt-touchpad-gestures.c
+++ b/src/evdev-mt-touchpad-gestures.c
@@ -113,7 +113,17 @@ tp_gesture_post_twofinger_scroll(struct tp_dispatch *tp, uint64_t time)
 	if (tp->scroll.method != LIBINPUT_CONFIG_SCROLL_2FG)
 		return;
 
-	delta = tp_get_average_touches_delta(tp);
+	/* On some semi-mt models slot 0 is more accurate, so for semi-mt
+	 * we only use slot 0. */
+	if (tp->semi_mt) {
+		if (!tp->touches[0].dirty)
+			return;
+
+		delta = tp_get_delta(&tp->touches[0]);
+	} else {
+		delta = tp_get_average_touches_delta(tp);
+	}
+
 	delta = tp_filter_motion(tp, &delta, time);
 
 	if (normalized_is_zero(delta))
-- 
2.3.5



More information about the wayland-devel mailing list