touchpad: ignore motion speed for hovering touches
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 2 Oct 2018 00:40:47 +0000 (10:40 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 2 Oct 2018 22:32:55 +0000 (22:32 +0000)
commita8e3f4d1a5dbfa785bebcd5ac7f53443d64201ee
tree00b8cddd4123919c9ece994ceea1642e60dba4a0
parentb599177200b337e485759785a338784a660337cb
touchpad: ignore motion speed for hovering touches

tp_detect_thumb_while_moving() assumes that of the 2 fingers down, at least
one must be in TOUCH_UPDATE, otherwise we wouldn't have a speed to analyze for
thumb.

If a touch starts in HOVERING and exceeds the speed limit, we were previously
increasing the 'exceeded count'. This later leads to an assert() in
tp_detect_thumb_while_moving() when the second finger comes down because
although we have multiple fingers, none of them are in TOUCH_UPDATE.

This only happens when fingers 2 and 3 come down in the same event frame,
because then we have nfingers_down at 2 (the hovering one doesn't count) but
we don't yet have a finger in TOUCH_UPDATE.

Fix this twofold, first by now calculating the speed on anything but
TOUCH_UPDATE. And second by force-resetting the speed count on
TOUCH_BEGIN/TOUCH_END so we definitely cover all the hover transitions.

Fixes #150

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/evdev-mt-touchpad.c
test/test-touchpad.c