[PATCH libinput 08/14] touchpad: check fake finger count for validity

Peter Hutterer peter.hutterer at who-t.net
Thu Jan 7 20:11:12 PST 2016


Setting TRIPLETAP unsets DOUBLETAP, etc. This doesn't usually happen with
kernel devices, but every once in a while I get this wrong in a test and spend
hours debugging the code...

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/evdev-mt-touchpad.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index b227eb9..a4a4b4e 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -140,6 +140,14 @@ tp_get_touch(struct tp_dispatch *tp, unsigned int slot)
 static inline unsigned int
 tp_fake_finger_count(struct tp_dispatch *tp)
 {
+	/* Only one of BTN_TOOL_DOUBLETAP/TRIPLETAP/... may be set at any
+	 * time */
+	if (__builtin_popcount(
+		       tp->fake_touches & ~(FAKE_FINGER_OVERFLOW|0x1)) > 1)
+	    log_bug_kernel(tp->device->base.seat->libinput,
+			   "Invalid fake finger state %#x\n",
+			   tp->fake_touches);
+
 	if (tp->fake_touches & FAKE_FINGER_OVERFLOW)
 		return FAKE_FINGER_OVERFLOW;
 	else /* don't count BTN_TOUCH */
-- 
2.5.0



More information about the wayland-devel mailing list