On Thu, Jun 30, 2016 at 12:22:10PM +1000, Peter Hutterer wrote:
> Increase the mm move threshold for 3 and 4 finger gestures to 2 and 3 mm,
> respectively. In multi-finger gestures it's common to have minor movement
> while all fingers are being put down or before the conscious movement starts.
> This can trigger invalid gesture detection (e.g. a pinch instead of a swipe).
> Increase the movement threshold to make sure we have sufficient input data.
> 
> No changes to 2-finger movements.
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=96687
> 
> Signed-off-by: Peter Hutterer <[email protected]>
> ---
>  src/evdev-mt-touchpad-gestures.c |  9 ++++++---
>  test/gestures.c                  | 10 +++++-----
>  2 files changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/src/evdev-mt-touchpad-gestures.c 
> b/src/evdev-mt-touchpad-gestures.c
> index e4e465a..a910bec 100644
> --- a/src/evdev-mt-touchpad-gestures.c
> +++ b/src/evdev-mt-touchpad-gestures.c
> @@ -182,12 +182,15 @@ tp_gesture_get_active_touches(const struct tp_dispatch 
> *tp,
>  }
>  
>  static int
> -tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch)
> +tp_gesture_get_direction(struct tp_dispatch *tp, struct tp_touch *touch,
> +                      unsigned int nfingers)
>  {
>       struct normalized_coords normalized;
>       struct device_float_coords delta;
>       double move_threshold = TP_MM_TO_DPI_NORMALIZED(1);
>  
> +     move_threshold *= (nfingers - 1);

The threshold now becomes 0 for 1 finger, which I assume was not the
intended behaviour. Should `-1` be removed (and the commit message adapted)?

Alternatively, something like this would give the result from the commit
message:

        move_threshold *= min(1, nfingers - 1);

> +
>       delta = device_delta(touch->point, touch->gesture.initial);
>  
>       normalized = tp_normalize_delta(tp, delta);
> @@ -347,8 +350,8 @@ tp_gesture_handle_state_unknown(struct tp_dispatch *tp, 
> uint64_t time)
>       }
>  
>       /* Else wait for both fingers to have moved */
> -     dir1 = tp_gesture_get_direction(tp, first);
> -     dir2 = tp_gesture_get_direction(tp, second);
> +     dir1 = tp_gesture_get_direction(tp, first, tp->gesture.finger_count);
> +     dir2 = tp_gesture_get_direction(tp, second, tp->gesture.finger_count);
>       if (dir1 == UNDEFINED_DIRECTION || dir2 == UNDEFINED_DIRECTION)
>               return GESTURE_STATE_UNKNOWN;
>  

[...]
_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to