touchpad: don't feed 0/0 deltas into the accel filters
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 8 Jul 2014 03:02:31 +0000 (13:02 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 9 Jul 2014 02:49:15 +0000 (12:49 +1000)
The resolution-based scaling may result in deltas of 0. The accel code doesn't
handle 0 deltas too well. 0/0 deltas can't happen for EV_REL devices, so the
code just isn't designed for it.

Most notably, events with delta 0/0 have no direction. That messes up the
history-based velocity calculation which stops whenever the current vector's
direction changes from the one in the trackers.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
src/evdev-mt-touchpad.c

index 0b06810..4f4633d 100644 (file)
@@ -63,7 +63,8 @@ tp_filter_motion(struct tp_dispatch *tp,
        motion.dx = *dx * tp->accel.x_scale_coeff;
        motion.dy = *dy * tp->accel.y_scale_coeff;
 
-       filter_dispatch(tp->filter, &motion, tp, time);
+       if (motion.dx != 0.0 || motion.dy != 0.0)
+               filter_dispatch(tp->filter, &motion, tp, time);
 
        *dx = motion.dx;
        *dy = motion.dy;