[PATCH libinput] gestures: make the gesture movement threshold depending on finger count
Peter Hutterer
peter.hutterer at who-t.net
Thu Jun 30 02:22:10 UTC 2016
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 at who-t.net>
---
src/evdev-mt-touchpad-gestures.c | 9 ++++++---
test/gestures.c | 10 +++++-----
2 files changed, 11 insertions(+), 8 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;
diff --git a/test/gestures.c b/test/gestures.c
index 401b074..472fbe7 100644
--- a/test/gestures.c
+++ b/test/gestures.c
@@ -961,13 +961,13 @@ START_TEST(gestures_pinch_4fg_btntool)
for (i = 0; i < 8; i++) {
litest_push_event_frame(dev);
if (dir_x > 0.0)
- dir_x -= 2;
+ dir_x -= 3;
else if (dir_x < 0.0)
- dir_x += 2;
+ dir_x += 3;
if (dir_y > 0.0)
- dir_y -= 2;
+ dir_y -= 3;
else if (dir_y < 0.0)
- dir_y += 2;
+ dir_y += 3;
litest_touch_move(dev,
0,
50 + dir_x,
@@ -1004,7 +1004,7 @@ START_TEST(gestures_pinch_4fg_btntool)
ck_assert(scale < oldscale);
angle = libinput_event_gesture_get_angle_delta(gevent);
- ck_assert_double_le(fabs(angle), 1.0);
+ ck_assert_double_le(fabs(angle), 1.5);
libinput_event_destroy(event);
libinput_dispatch(li);
--
2.7.4
More information about the wayland-devel
mailing list