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