filter: always init a delta smoothener for 10/10ms on trackpoints
authorPeter Hutterer <peter.hutterer@who-t.net>
Mon, 6 Aug 2018 05:24:04 +0000 (15:24 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 6 Aug 2018 05:24:04 +0000 (15:24 +1000)
If the trackpoint gives us deltas with less than 10ms intervals, something is
wrong. Could be bad hardware, a glitch in the matrix or a discontinuity in
the otherwise appropriately named time-space continuum. Usually it's the
first.

Let's always set up trackpoint delta smoothening for 10ms to improve the
pointer speed calculation and avoid jerky behaviors. i.e. if a trackpoint
delta comes in below 10ms, pretend it came in with a 10ms interval for
calculating the speed.

Fixes https://gitlab.freedesktop.org/libinput/libinput/issues/104

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/filter-trackpoint.c

index 1b92626..a401a71 100644 (file)
@@ -185,6 +185,7 @@ struct motion_filter *
 create_pointer_accelerator_filter_trackpoint(double multiplier)
 {
        struct trackpoint_accelerator *filter;
+       struct pointer_delta_smoothener *smoothener;
 
        assert(multiplier > 0.0);
 
@@ -210,5 +211,10 @@ create_pointer_accelerator_filter_trackpoint(double multiplier)
 
        filter->base.interface = &accelerator_interface_trackpoint;
 
+       smoothener = zalloc(sizeof(*smoothener));
+       smoothener->threshold = ms2us(10);
+       smoothener->value = ms2us(10);
+       filter->trackers.smoothener = smoothener;
+
        return &filter->base;
 }