From 516f3fcf6b1eb16ec8059143349d46f139dd1060 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 29 Jun 2016 10:03:23 +1000 Subject: [PATCH libinput] gestures: make the gesture movement threshold depending on finger count Increase the mm move threshold for 3 and 4 finger gestures to 2 and 3 mm, respectively. In multi-finger gestures it's common to have minor movement while all fingers are being put down or before the conscious movement starts. This can trigger invalid gesture detection (e.g. a pinch instead of a swipe). Increase the movement threshold to make sure we have sufficient input data. No changes to 2-finger movements. Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad-gestures.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index e4e465a..a910bec 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -182,12 +182,15 @@ tp_gesture_get_active_touches(const struct tp_dispatch *tp, } static int -tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch) +tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch, + unsigned int nfingers) { struct normalized_coords normalized; struct device_float_coords delta; double move_threshold = TP_MM_TO_DPI_NORMALIZED(1); + move_threshold *= (nfingers - 1); + delta = device_delta(touch->point, touch->gesture.initial); normalized = tp_normalize_delta(tp, delta); @@ -347,8 +350,8 @@ tp_gesture_handle_state_unknown(struct tp_dispatch *tp, uint64_t time) } /* Else wait for both fingers to have moved */ - dir1 = tp_gesture_get_direction(tp, first); - dir2 = tp_gesture_get_direction(tp, second); + dir1 = tp_gesture_get_direction(tp, first, tp->gesture.finger_count); + dir2 = tp_gesture_get_direction(tp, second, tp->gesture.finger_count); if (dir1 == UNDEFINED_DIRECTION || dir2 == UNDEFINED_DIRECTION) return GESTURE_STATE_UNKNOWN; -- 2.7.4