mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-24 20:30:04 +01:00
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>
This commit is contained in:
parent
0926f570c4
commit
11917061fe
1 changed files with 13 additions and 12 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue