Commit 11917061 authored by Peter Hutterer's avatar Peter Hutterer

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=96687Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 0926f570
......@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment