[PATCH v3 libinput] touchpad: serial synaptics need to fake new touches on TRIPLETAP
Hans de Goede
hdegoede at redhat.com
Tue Aug 4 00:03:53 PDT 2015
Hi,
On 04-08-15 03:23, Peter Hutterer wrote:
> On the 4.1 kernels synaptics pretends to have 3 slots (the serial fw only does
> 2). This was added to avoid cursor jumps but has since been reverted for 4.2
> (kernel commit dbf3c37086, 4.1.3 is still buggy). In some cases a TRIPLETAP
> may be triggered without slot 2 ever activating.
>
> While there are still those kernels out there, work around this bug by opening
> a new touch point where none exists if the fake finger count exceeds the slot
> count.
>
> Reported-by: Jan Alexander Steffens <jan.steffens at gmail.com>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> Tested-by: Jan Alexander Steffens <jan.steffens at gmail.com>
> Reviewed-by: Hans de Goede <hdegoede at redhat.com>
> ---
> Changes to v2:
> - split out the handling instead of having a tmp state variable, see Hans'
> comments from v2
>
> Mainly sending this to the list again so I have a link to point people to.
> If you're on 4.1.x add this patch to your distribution package.
>
> src/evdev-mt-touchpad.c | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index a683d9a..5ef03d5 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -369,13 +369,23 @@ tp_restore_synaptics_touches(struct tp_dispatch *tp,
> for (i = 0; i < tp->num_slots; i++) {
> struct tp_touch *t = tp_get_touch(tp, i);
>
> - if (t->state != TOUCH_END)
> + switch(t->state) {
> + case TOUCH_HOVERING:
> + case TOUCH_BEGIN:
> + case TOUCH_UPDATE:
> continue;
> -
> - /* new touch, move it through begin to update immediately */
> - tp_new_touch(tp, t, time);
> - tp_begin_touch(tp, t, time);
> - t->state = TOUCH_UPDATE;
> + case TOUCH_NONE:
> + /* new touch, move it through to begin immediately */
> + tp_new_touch(tp, t, time);
> + tp_begin_touch(tp, t, time);
> + break;
> + case TOUCH_END:
> + /* touch just ended ,we need need to restore it to update */
The comma "," character in the comment is in the wrong place (it needs to before the
space not after, other then that this version looks fine and still is:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> + tp_new_touch(tp, t, time);
> + tp_begin_touch(tp, t, time);
> + t->state = TOUCH_UPDATE;
> + break;
> + }
> }
> }
>
>
More information about the wayland-devel
mailing list