summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2019-09-19 12:51:10 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2019-10-16 13:37:43 +1000
commit093a87898bd2c5ff4791e02778ed4f3856c949f9 (patch)
treef29f49ced3010ecbbcecc84241e78c38dc5f2d96
parentad7708f6a55b16e0d2684c4897f53e19d3467bf4 (diff)
touchpad: only identify for pinch in a distinct pinch position
Previously, any lower finger spaced more than the vertical threshold apart would be labelled as thumb. This causes some taps to be detected as single-taps, particularly where the user's hand is at an angle that causes the touches to be effectively vertical. Restructure that condition so that we only go for a thumb if we're distinctively apart, and we only *not* go for thumb if we're distinctively close together. Fixes #359 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 0ce06d131499f9d3588f97263dea2e004ce5bbcd)
-rw-r--r--src/evdev-mt-touchpad-thumb.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/evdev-mt-touchpad-thumb.c b/src/evdev-mt-touchpad-thumb.c
index eb20616a..19531e05 100644
--- a/src/evdev-mt-touchpad-thumb.c
+++ b/src/evdev-mt-touchpad-thumb.c
@@ -335,15 +335,18 @@ tp_thumb_update_multifinger(struct tp_dispatch *tp)
/* Position-based thumb detection: When a new touch arrives, check the
* two lowest touches. If they qualify for 2-finger scrolling, clear
- * thumb status. If not, mark the lower touch (based on pinch_eligible)
- * as either PINCH or SUPPRESSED.
+ * thumb status.
+ *
+ * If they were in distinct diagonal position, then mark the lower
+ * touch (based on pinch_eligible) as either PINCH or SUPPRESSED. If
+ * we're too close together for a thumb, lift that.
*/
- if (mm.y > SCROLL_MM_Y) {
+ if (mm.y > SCROLL_MM_Y && mm.x > SCROLL_MM_X) {
if (tp->thumb.pinch_eligible)
tp_thumb_pinch(tp, first);
else
tp_thumb_suppress(tp, first);
- } else {
+ } else if (mm.x < SCROLL_MM_X && mm.y < SCROLL_MM_Y) {
tp_thumb_lift(tp);
}
}