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.hutte...@who-t.net>
---
Changes to v1:
- better commit message/comments
- dropped the finger_count > 2 check that was a dead condition before anyway

 src/evdev-mt-touchpad-gestures.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c
index 08c179d..de3ec4f 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;
                }
        }
 
-- 
2.9.3

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to