[PATCH libinput 1/6] touchpad: always call into the the tap state machine
Hans de Goede
hdegoede at redhat.com
Wed Jun 11 01:45:17 PDT 2014
Hi,
On 06/11/2014 02:11 AM, Peter Hutterer wrote:
> A button event consumed by the softbutton or clickpad code does not feed into
> the tap state machine, leaving it in its current state. The touch generating
> that event however may have triggered state changes.
>
> For some tap/click combinations this gives us either double press/release
> events or an inconsistent order of events. Those issues include:
> * a really short physical click causes a click + tap-click
> * a really short physical click on the right software button causes a right
> click + left tap-click
> * tap + click causes double button left press events
>
> To avoid these, notify the tap code that a button event has occured and
> process that accordingly. Depending on the state this may either continue to
> the DEAD state or release the current tap button and then go to the DEAD
> state.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Looks good:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> src/evdev-mt-touchpad.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 8b502b7..0294eb2 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -545,13 +545,12 @@ tp_post_events(struct tp_dispatch *tp, uint64_t time)
> {
> struct tp_touch *t = tp_current_touch(tp);
> double dx, dy;
> + int consumed = 0;
>
> - if (tp_post_button_events(tp, time) != 0) {
> - tp_stop_scroll_events(tp, time);
> - return;
> - }
> + consumed |= tp_tap_handle_state(tp, time);
> + consumed |= tp_post_button_events(tp, time);
>
> - if (tp_tap_handle_state(tp, time) != 0) {
> + if (consumed) {
> tp_stop_scroll_events(tp, time);
> return;
> }
>
More information about the wayland-devel
mailing list