[PATCH libinput] evdev: split scroll threshold and direction lock threshold into two

Hans de Goede hdegoede at redhat.com
Mon Aug 10 01:39:42 PDT 2015


Hi,

On 05-08-15 03:45, Peter Hutterer wrote:
> The previous code used a 5mm threshold before axis events were posted. This
> threshold was on top of the 2mm 2fg threshold (and timeout handling) in the
> gesture code and effectively prevented events from being sent after a timeout,
> or in the 2mm-5mm range.
>
> We still want a directional lock though, so split the two out. The default 5mm
> threshold is set to 0 for touchpads since we have our own handling of the
> threshold there. The directional lock only applies once scrollin has started
> and remains on 5mm.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

LGTM: Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


> ---
>   src/evdev-mt-touchpad.c | 5 +++--
>   src/evdev.c             | 5 +++--
>   src/evdev.h             | 1 +
>   3 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index a683d9a..872da98 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -1628,8 +1628,9 @@ tp_init_scroll(struct tp_dispatch *tp, struct evdev_device *device)
>   	tp->scroll.method = tp_scroll_get_default_method(tp);
>   	tp->device->base.config.scroll_method = &tp->scroll.config_method;
>
> -	/* In mm for touchpads with valid resolution, see tp_init_accel() */
> -	tp->device->scroll.threshold = 5.0;
> +	 /* In mm for touchpads with valid resolution, see tp_init_accel() */
> +	tp->device->scroll.threshold = 0.0;
> +	tp->device->scroll.direction_lock_threshold = 5.0;
>
>   	return 0;
>   }
> diff --git a/src/evdev.c b/src/evdev.c
> index 17c2604..53ebf9d 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -2146,6 +2146,7 @@ evdev_device_create(struct libinput_seat *seat,
>   	device->pending_event = EVDEV_NONE;
>   	device->devname = libevdev_get_name(device->evdev);
>   	device->scroll.threshold = 5.0; /* Default may be overridden */
> +	device->scroll.direction_lock_threshold = 5.0; /* Default may be overridden */
>   	device->scroll.direction = 0;
>   	device->scroll.wheel_click_angle =
>   		evdev_read_wheel_click_prop(device);
> @@ -2414,12 +2415,12 @@ evdev_post_scroll(struct evdev_device *device,
>   	   trigger speed to start scrolling in the other direction */
>   	} else if (!evdev_is_scrolling(device,
>   			       LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL)) {
> -		if (fabs(delta->y) >= device->scroll.threshold)
> +		if (fabs(delta->y) >= device->scroll.direction_lock_threshold)
>   			evdev_start_scrolling(device,
>   				      LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
>   	} else if (!evdev_is_scrolling(device,
>   				LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) {
> -		if (fabs(delta->x) >= device->scroll.threshold)
> +		if (fabs(delta->x) >= device->scroll.direction_lock_threshold)
>   			evdev_start_scrolling(device,
>   				      LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL);
>   	}
> diff --git a/src/evdev.h b/src/evdev.h
> index be5df0d..65c5a41 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -166,6 +166,7 @@ struct evdev_device {
>   		void (*change_scroll_method)(struct evdev_device *device);
>   		bool button_scroll_active;
>   		double threshold;
> +		double direction_lock_threshold;
>   		uint32_t direction;
>   		struct normalized_coords buildup;
>
>


More information about the wayland-devel mailing list