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 <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2018-03-09 09:41:57 +10:00
parent 6936a15558
commit 50418a0153

View file

@ -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;
}