touchpad: Ignore fingers in button area for 2 finger scroll
authorHans de Goede <hdegoede@redhat.com>
Tue, 8 Apr 2014 06:34:20 +0000 (08:34 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 22 May 2014 12:51:41 +0000 (14:51 +0200)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
src/evdev-mt-touchpad.c

index c9a142f40d337931f700ac30248bdb5d02111b45..c61d8730eeb290dd4ca1936106173454547bec27 100644 (file)
@@ -446,7 +446,7 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint32_t time)
        double tmpx, tmpy;
 
        tp_for_each_touch(tp, t) {
-               if (t->dirty) {
+               if (tp_touch_active(tp, t) && t->dirty) {
                        nchanged++;
                        tp_get_delta(t, &tmpx, &tmpy);
 
@@ -499,12 +499,21 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, uint32_t time)
 static int
 tp_post_scroll_events(struct tp_dispatch *tp, uint32_t time)
 {
+       struct tp_touch *t;
+       int nfingers_down = 0;
+
        /* don't scroll if a clickpad is held down */
        if (tp->buttons.is_clickpad &&
            (tp->buttons.state || tp->buttons.old_state))
                return 0;
 
-       if (tp->nfingers_down != 2) {
+       /* Only count active touches for 2 finger scrolling */
+       tp_for_each_touch(tp, t) {
+               if (tp_touch_active(tp, t))
+                       nfingers_down++;
+       }
+
+       if (nfingers_down != 2) {
                /* terminate scrolling with a zero scroll event to notify
                 * caller that it really ended now */
                if (tp->scroll.state != SCROLL_STATE_NONE) {