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. 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.steff...@gmail.com> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Tested-by: Jan Alexander Steffens <jan.steff...@gmail.com> --- src/evdev-mt-touchpad.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 6718b61..376f394 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -368,13 +368,22 @@ 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 to begin immediately */ + case TOUCH_NONE: + case TOUCH_END: + tp_new_touch(tp, t, time); + tp_begin_touch(tp, t, time); + break; + } - /* 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; + /* touch just ended ,we need need to restore it to update */ + if (t->state == TOUCH_END) + t->state = TOUCH_UPDATE; } } -- 2.4.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel