summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2016-06-29 10:03:23 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2016-07-04 07:42:54 +1000
commit4923c404e8199c49106700a5c1f96f0ac3428f64 (patch)
treebba266db2b2dba6000a7ada8796334b40a5c41d5 /src
parent5436c2feaa3c499ecdfa053050e9f7f3707dc26e (diff)
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. https://bugs.freedesktop.org/show_bug.cgi?id=96687 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/evdev-mt-touchpad-gestures.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index e4e465a6..a910bec4 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;