diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2016-06-28 15:25:42 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2016-06-29 08:32:04 +1000 |
commit | 11917061fe320c08aab66134d10038052fb5ade0 (patch) | |
tree | a57ccb1d86054800fe8433bf5e867f75151cbe71 | |
parent | 0926f570c448b4d321e23e075f0ad3032c56b92a (diff) |
touchpad: only check for vertical finger distribution on 2fg gestures
A natural hand position for a 4-finger swipe will have one finger well below
the other triggering the pinch detection. This is obviously wrong, only do the
finger position analysis when we have 2 fingers.
This is only a partial fix, for 3-4 finger gestures chances are high that the
third/fourth finger come in a different event frame. Before that we likely
detect 2 fingers in a possible pinch position and still trigger the code path.
This issue has to be fixed separately.
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>
-rw-r--r-- | src/evdev-mt-touchpad-gestures.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index a8ff37ed..e4e465a6 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -330,19 +330,20 @@ tp_gesture_handle_state_unknown(struct tp_dispatch *tp, uint64_t time) /* for two-finger gestures, if the fingers stay unmoving for a * while, assume (slow) scroll */ - if (tp->gesture.finger_count == 2 && - time > (tp->gesture.initial_time + DEFAULT_GESTURE_2FG_SCROLL_TIMEOUT)) { - tp_gesture_set_scroll_buildup(tp); - return GESTURE_STATE_SCROLL; - } + if (tp->gesture.finger_count == 2) { + if (time > (tp->gesture.initial_time + DEFAULT_GESTURE_2FG_SCROLL_TIMEOUT)) { + tp_gesture_set_scroll_buildup(tp); + return GESTURE_STATE_SCROLL; + } - /* Else 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 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 wait for both fingers to have moved */ |