From 50418a0153f271a03dc9039e8e7776360f0fcba1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 9 Mar 2018 09:41:57 +1000 Subject: [PATCH] fallback: fix touchscreen defuzzing The hysteresis-returned point always differs from the current point, even if the hysteresis kicks in. We need to compare to the hysteresis center. And the returned point is only the new center if we exceed the margin, otherwise the center stays as-is. The touch_fuzz() test only succeeded for this because for the values we were introducing jitter by, the kernel filtered out all the actual movement so these paths weren't hit. Signed-off-by: Peter Hutterer --- src/evdev-fallback.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/evdev-fallback.c b/src/evdev-fallback.c index d1ca81f0..269b3f5a 100644 --- a/src/evdev-fallback.c +++ b/src/evdev-fallback.c @@ -130,12 +130,13 @@ fallback_filter_defuzz_touch(struct fallback_dispatch *dispatch, point = evdev_hysteresis(&slot->point, &slot->hysteresis_center, &dispatch->mt.hysteresis_margin); + slot->point = point; - slot->hysteresis_center = slot->point; - if (point.x == slot->point.x && point.y == slot->point.y) + if (point.x == slot->hysteresis_center.x && + point.y == slot->hysteresis_center.y) return true; - slot->point = point; + slot->hysteresis_center = point; return false; }