[PATCH v2 libinput] gestures: if fingers don't move, force a gesture by finger position
Hans de Goede
hdegoede at redhat.com
Wed Dec 21 08:36:59 UTC 2016
Hi,
On 21-12-16 01:12, Peter Hutterer wrote:
> 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 at who-t.net>
> ---
> Changes to v1:
> - better commit message/comments
> - dropped the finger_count > 2 check that was a dead condition before anyway
LGTM now:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
>
> 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;
> }
> }
>
>
More information about the wayland-devel
mailing list