summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2016-12-20 10:36:37 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2016-12-22 07:26:29 +1000
commitaf1e6c08acf97c7c4911d13294f6fa1d68d07fab (patch)
treec0f27b538ed1b81c1581208aa93fbbbdfaefe78e
parent06489d9b07fc7a6bb2a048c7929611a433130f32 (diff)
gestures: if fingers don't move, force a gesture by finger position
If the fingers rest on the touchpad without moving for a timeout, switch to pinch or swipe based on the finger position. We already switched to two-finger scrolling based on the timeout, now we also do so for 3 and 4 finger gestures. This gives us better reaction to small movements. This also fixes previously unreachable code: the test for the finger position required at least 3 fingers down but was within a condition that ensured only 2 fingers were down. This was introduced in 11917061fe320c. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--src/evdev-mt-touchpad-gestures.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index 08c179df..de3ec4f4 100644
--- a/src/evdev-mt-touchpad-gestures.c
+++ b/src/evdev-mt-touchpad-gestures.c
@@ -331,21 +331,23 @@ tp_gesture_handle_state_unknown(struct tp_dispatch *tp, uint64_t time)
int yres = tp->device->abs.absinfo_y->resolution;
int vert_distance;
- /* for two-finger gestures, if the fingers stay unmoving for a
- * while, assume (slow) scroll */
- if (tp->gesture.finger_count == 2) {
- if (time > (tp->gesture.initial_time + DEFAULT_GESTURE_2FG_SCROLL_TIMEOUT)) {
+ if (time > (tp->gesture.initial_time + DEFAULT_GESTURE_2FG_SCROLL_TIMEOUT)) {
+ /* for two-finger gestures, if the fingers stay unmoving for a
+ * while, assume (slow) scroll */
+ if (tp->gesture.finger_count == 2) {
tp_gesture_set_scroll_buildup(tp);
return GESTURE_STATE_SCROLL;
}
- /* Else check if one finger is > 20mm below the others */
+ /* for 3+ finger gestures, check if one finger is > 20mm
+ below the others */
vert_distance = abs(first->point.y - second->point.y);
if (vert_distance > 20 * yres &&
- tp->gesture.finger_count > 2 &&
tp->gesture.enabled) {
tp_gesture_init_pinch(tp);
return GESTURE_STATE_PINCH;
+ } else {
+ return GESTURE_STATE_SWIPE;
}
}