touchpad: check the pointer touch for history size
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 15 Jul 2014 06:01:49 +0000 (16:01 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 16 Jul 2014 04:38:12 +0000 (14:38 +1000)
The current touch may not be the pointer touch, so it's pointless checking the
history size on that touch. Instead, search for the pointer touch first, check
if it's dirty and then check the history size.

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

index 69b63e052e78f538378229459c45f1b3fa714243..c7fd3a128145a50285e2957c3b203e5f1e255638 100644 (file)
@@ -524,23 +524,23 @@ tp_post_events(struct tp_dispatch *tp, uint64_t time)
        if (tp_post_scroll_events(tp, time) != 0)
                return;
 
-       if (t->history.count >= TOUCHPAD_MIN_SAMPLES) {
-               if (!t->is_pointer) {
-                       tp_for_each_touch(tp, t) {
-                               if (t->is_pointer)
-                                       break;
-                       }
+       if (!t->is_pointer) {
+               tp_for_each_touch(tp, t) {
+                       if (t->is_pointer)
+                               break;
                }
+       }
 
-               if (!t->is_pointer)
-                       return;
+       if (!t->is_pointer ||
+           !t->dirty ||
+           t->history.count < TOUCHPAD_MIN_SAMPLES)
+               return;
 
-               tp_get_delta(t, &dx, &dy);
-               tp_filter_motion(tp, &dx, &dy, time);
+       tp_get_delta(t, &dx, &dy);
+       tp_filter_motion(tp, &dx, &dy, time);
 
-               if (dx != 0.0 || dy != 0.0)
-                       pointer_notify_motion(&tp->device->base, time, dx, dy);
-       }
+       if (dx != 0.0 || dy != 0.0)
+               pointer_notify_motion(&tp->device->base, time, dx, dy);
 }
 
 static void