[PATCH 1/2] touchpad: when clearing the touchpad state, release fake touches too

Hans de Goede hdegoede at redhat.com
Thu Apr 30 00:49:30 PDT 2015


Hi,

On 30-04-15 07:59, Peter Hutterer wrote:
> Causes an error message in the device_disable_release_tap_n_drag test. When
> the touchpad is suspended, all touches are ended in tp_clear_state. Since the
> hovering support was added, this returns the touches to TOUCH_HOVERING, a
> subsequent tp_handle_state() will turn them back into TOUCH_BEGIN based on
> BTN_TOUCH and BTN_TOOL_FINGER still being down.
>
> Clear the fake touch buttons as well after ending the touches, this way the
> touch points are reset to TOUCH_NONE as intended.
> Once we do that we don't need to manually change the tap finger count when
> releasing taps, we can just let the count reset naturally.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>   src/evdev-mt-touchpad-tap.c | 1 -
>   src/evdev-mt-touchpad.c     | 7 +++++++
>   2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/src/evdev-mt-touchpad-tap.c b/src/evdev-mt-touchpad-tap.c
> index 0f25e26..bd58bb1 100644
> --- a/src/evdev-mt-touchpad-tap.c
> +++ b/src/evdev-mt-touchpad-tap.c
> @@ -844,7 +844,6 @@ tp_release_all_taps(struct tp_dispatch *tp, uint64_t now)
>   	}
>
>   	tp->tap.state = tp->nfingers_down ? TAP_STATE_DEAD : TAP_STATE_IDLE;
> -	tp->tap.tap_finger_count = 0;
>   }
>
>   void

We still need this ("tp->tap.tap_finger_count = 0;") for the
tp_tap_enabled_update() call, I know you're trying to fix this in the next
commit, but then at least this belongs in the next commit....

Also see my comments on the next commit.

> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index d5ce880..e017559 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -750,6 +750,12 @@ tp_destroy(struct evdev_dispatch *dispatch)
>   }
>
>   static void
> +tp_release_fake_touches(struct tp_dispatch *tp)
> +{
> +	tp->fake_touches = 0;
> +}
> +
> +static void
>   tp_clear_state(struct tp_dispatch *tp)
>   {
>   	uint64_t now = libinput_now(tp->device->base.seat->libinput);
> @@ -772,6 +778,7 @@ tp_clear_state(struct tp_dispatch *tp)
>   	tp_for_each_touch(tp, t) {
>   		tp_end_sequence(tp, t, now);
>   	}
> +	tp_release_fake_touches(tp);
>
>   	tp_handle_state(tp, now);
>   }
>

Regards,

Hans


More information about the wayland-devel mailing list