[PATCH libinput] touchpad: drop motion hysteresis

Peter Hutterer peter.hutterer at who-t.net
Sun Jan 31 22:43:53 PST 2016


On Mon, Feb 01, 2016 at 12:38:13PM +1000, Peter Hutterer wrote:
> Some older touchpad devices jitter a fair bit when a finger is resting on the
> touchpad. That's why the hysteresis was introduced in the synaptics driver
> back in 2011. However, the default value of the hysteresis in the synaptics
> driver ended up being 0, even though the code looks like it's using a fraction
> of the touchpad diagonal. When the hysteresis code was ported to libinput it
> was eventually set to 0.5mm.
> 
> Turns out this is still too high and tiny finger motions are either
> nonreactive or quite jumpy, making it hard to select small targets. Drop the
> hysteresis by reducing its margin to 0. I'm leaving the code in place for now
> because this will likely be needed for some devices.
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=93503
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

patch is withdrawn, I just got recordings from a touchpad that needs it, so
I'll combine this patch with the one that keeps the behaviour for that
touchpad

Cheers,
  Peter

> ---
>  src/evdev-mt-touchpad.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index f249116..757c7c7 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -1957,7 +1957,6 @@ tp_init(struct tp_dispatch *tp,
>  {
>  	int width, height;
>  	double diagonal;
> -	int res_x, res_y;
>  
>  	tp->base.interface = &tp_interface;
>  	tp->device = device;
> @@ -1971,8 +1970,6 @@ tp_init(struct tp_dispatch *tp,
>  	if (tp_init_slots(tp, device) != 0)
>  		return -1;
>  
> -	res_x = tp->device->abs.absinfo_x->resolution;
> -	res_y = tp->device->abs.absinfo_y->resolution;
>  	width = device->abs.dimensions.x;
>  	height = device->abs.dimensions.y;
>  	diagonal = sqrt(width*width + height*height);
> @@ -1981,8 +1978,8 @@ tp_init(struct tp_dispatch *tp,
>  						       EV_ABS,
>  						       ABS_MT_DISTANCE);
>  
> -	tp->hysteresis_margin.x = res_x/2;
> -	tp->hysteresis_margin.y = res_y/2;
> +	tp->hysteresis_margin.x = 0;
> +	tp->hysteresis_margin.y = 0;
>  
>  	if (tp_init_accel(tp, diagonal) != 0)
>  		return -1;
> -- 
> 2.5.0
> 


More information about the wayland-devel mailing list