Hi,

On 06/04/2014 06:09 AM, Peter Hutterer wrote:
> The direction lock was intended to avoid erroneous horizontal scroll events
> when scrolling vertically (and vice versa). Some testing on my touchpad here
> shows that it is too easy to accidentally lock the direction when no lock is
> intended (e.g. moving around an image). And quite hard to figure out what a
> pure vertical gesture is.
> 
> I get movements from 90 degrees to 70 degrees for something my brain would
> consider vertical scrolling. Depending on the hand position, the fingers
> actually perform a slight curve, not a straight line.
> 
> Hence - drop the direction lock, but increase the threshold a little. It
> doesn't totally avoid horizontal scroll events but keeps them minimal.
> 
> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
> ---
> Ok, I give up. I thought I could find a simple way of locking the scroll
> directions but I ran out of time and the simplest approach didn't work that
> greatly.
> 
> This patch replaces 5 and 6 of this series (the ones I never pushed)

Thanks, looks good:

Reviewed-by: Hans de Goede <hdego...@redhat.com>

Regards,

Hans


> 
>  src/evdev-mt-touchpad.c | 25 +++++++++++--------------
>  1 file changed, 11 insertions(+), 14 deletions(-)
> 
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 26d5f7d..466cf5e 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -463,21 +463,18 @@ tp_post_twofinger_scroll(struct tp_dispatch *tp, 
> uint64_t time)
>  
>       tp_filter_motion(tp, &dx, &dy, time);
>  
> -     if (tp->scroll.state == SCROLL_STATE_NONE) {
> -             /* Require at least one px scrolling to start */
> -             if (dx <= -1.0 || dx >= 1.0) {
> -                     tp->scroll.state = SCROLL_STATE_SCROLLING;
> -                     tp->scroll.direction |= (1 << 
> LIBINPUT_POINTER_AXIS_HORIZONTAL_SCROLL);
> -             }
> -
> -             if (dy <= -1.0 || dy >= 1.0) {
> -                     tp->scroll.state = SCROLL_STATE_SCROLLING;
> -                     tp->scroll.direction |= (1 << 
> LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL);
> -             }
> -
> -             if (tp->scroll.state == SCROLL_STATE_NONE)
> -                     return;
> +     /* Require at least three px scrolling to start */
> +     if (dy <= -3.0 || dy >= 3.0) {
> +             tp->scroll.state = SCROLL_STATE_SCROLLING;
> +             tp->scroll.direction |= (1 << 
> LIBINPUT_POINTER_AXIS_VERTICAL_SCROLL);
>       }
> +     if (dx <= -3.0 || dx >= 3.0) {
> +             tp->scroll.state = SCROLL_STATE_SCROLLING;
> +             tp->scroll.direction |= (1 << 
> LIBINPUT_POINTER_AXIS_HORIZONTAL_SCROLL);
> +     }
> +
> +     if (tp->scroll.state == SCROLL_STATE_NONE)
> +             return;
>  
>       /* Stop spurious MOTION events at the end of scrolling */
>       tp_for_each_touch(tp, t)
> 
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to