touchpad: fine tune size-based thumb detection
authorMatt Mayfield <mdmayfield@users.noreply.github.com>
Wed, 22 Aug 2018 01:54:58 +0000 (20:54 -0500)
committerMatt Mayfield <mdmayfield@users.noreply.github.com>
Wed, 29 Aug 2018 21:35:22 +0000 (16:35 -0500)
In testing on an Apple Magic Trackpad, thumb touches are reliably
detected by being quite large in the major dimension, but around
half the size in the minor dimension.

quirks/50-system-apple.quirks
src/evdev-mt-touchpad.c

index f643ccc..9f6d172 100644 (file)
@@ -34,7 +34,7 @@ MatchProduct=0x030E
 AttrSizeHint=130x110
 AttrTouchSizeRange=20:10
 AttrPalmSizeThreshold=900
-AttrThumbSizeThreshold=800
+AttrThumbSizeThreshold=700
 
 [Apple Touchpad OneButton]
 MatchUdevType=touchpad
index 6404175..53e3c22 100644 (file)
@@ -1133,16 +1133,17 @@ tp_thumb_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time)
         * a thumb.
         */
        if (tp->thumb.use_pressure &&
-           t->pressure > tp->thumb.pressure_threshold)
+           t->pressure > tp->thumb.pressure_threshold) {
                t->thumb.state = THUMB_STATE_YES;
-       else if (tp->thumb.use_size &&
-                (t->major > tp->thumb.size_threshold ||
-                 t->minor > tp->thumb.size_threshold))
+       else if (tp->thumb.use_size &&
+                (t->major > tp->thumb.size_threshold) &&
+                (t->minor < (tp->thumb.size_threshold * 0.6))) {
                t->thumb.state = THUMB_STATE_YES;
-       else if (t->point.y > tp->thumb.lower_thumb_line &&
+       else if (t->point.y > tp->thumb.lower_thumb_line &&
                 tp->scroll.method != LIBINPUT_CONFIG_SCROLL_EDGE &&
-                t->thumb.first_touch_time + THUMB_MOVE_TIMEOUT < time)
+                t->thumb.first_touch_time + THUMB_MOVE_TIMEOUT < time) {
                t->thumb.state = THUMB_STATE_YES;
+       }
 
        /* now what? we marked it as thumb, so:
         *