[PATCH libinput 1/2] touchpad: reduce the initial timeout for tapping after touch

Peter Hutterer peter.hutterer at who-t.net
Wed Feb 1 05:07:58 UTC 2017


On Mon, Dec 12, 2016 at 03:53:02PM +1000, Peter Hutterer wrote:
> This is the timeout before we decide "this is just a finger down, not a tap".
> Until this timeout is hit a finger's movement is filtered. To allow for a more
> responsive touchpad, we want that timeout as short as possible.
> 
> Event analysis from several users showed that 95% of the touches are less than
> 100ms long. Reducing the threshold should have almost no impact on most
> tapping users but improves the reaction time of the pointer for normal
> movements.
> 
> For a more details see:
> http://who-t.blogspot.com/2016/12/libinput-touchpad-tap-analysis.html
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

follow-up, I had to revert this one. Too many reports by users who had
tapping break completely (e.g.
https://bugs.freedesktop.org/show_bug.cgi?id=99447). It's reverted in git
master now.

    45d7794..e86fdd5  master -> master

Cheers,
   Peter

> ---
>  src/evdev-mt-touchpad-tap.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/src/evdev-mt-touchpad-tap.c b/src/evdev-mt-touchpad-tap.c
> index cb4abf2..b65bac4 100644
> --- a/src/evdev-mt-touchpad-tap.c
> +++ b/src/evdev-mt-touchpad-tap.c
> @@ -33,6 +33,7 @@
>  
>  #include "evdev-mt-touchpad.h"
>  
> +#define DEFAULT_TAP_INITIAL_TIMEOUT_PERIOD ms2us(100)
>  #define DEFAULT_TAP_TIMEOUT_PERIOD ms2us(180)
>  #define DEFAULT_DRAG_TIMEOUT_PERIOD ms2us(300)
>  #define DEFAULT_TAP_MOVE_THRESHOLD TP_MM_TO_DPI_NORMALIZED(3)
> @@ -127,6 +128,13 @@ tp_tap_notify(struct tp_dispatch *tp,
>  }
>  
>  static void
> +tp_tap_set_initial_timer(struct tp_dispatch *tp, uint64_t time)
> +{
> +	libinput_timer_set(&tp->tap.timer,
> +			   time + DEFAULT_TAP_INITIAL_TIMEOUT_PERIOD);
> +}
> +
> +static void
>  tp_tap_set_timer(struct tp_dispatch *tp, uint64_t time)
>  {
>  	libinput_timer_set(&tp->tap.timer, time + DEFAULT_TAP_TIMEOUT_PERIOD);
> @@ -155,7 +163,7 @@ tp_tap_idle_handle_event(struct tp_dispatch *tp,
>  	case TAP_EVENT_TOUCH:
>  		tp->tap.state = TAP_STATE_TOUCH;
>  		tp->tap.first_press_time = time;
> -		tp_tap_set_timer(tp, time);
> +		tp_tap_set_initial_timer(tp, time);
>  		break;
>  	case TAP_EVENT_RELEASE:
>  		break;
> -- 
> 2.9.3
> 


More information about the wayland-devel mailing list