mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-03 19:30:33 +01:00
Synatics touchpads only have 2 slots, but support TRIPLETAP and above. When the third finger touches, the kernel may end the second slot and re-start it with the coordinates of the third touch in the next frame. The event sequence is something like: ABS_MT_SLOT 0 ABS_MT_POSITION_X 4000 ABS_MT_POSITION_Y 4000 ABS_MT_PRESSURE 78 ABS_MT_SLOT 1 ABS_MT_TRACKING_ID -1 ABS_X 4000 ABS_Y 4000 ABS_PRESSURE 78 BTN_TOOL_DOUBLETAP 0 BTN_TOOL_TRIPLETAP 1 --- SYN_REPORT (0) ---------- ABS_MT_SLOT 0 ABS_MT_POSITION_X 4000 ABS_MT_POSITION_Y 4000 ABS_MT_PRESSURE 78 ABS_MT_SLOT 1 ABS_MT_TRACKING_ID 55 ABS_MT_POSITION_X 2000 ABS_MT_POSITION_Y 2000 ABS_MT_PRESSURE 72 ABS_X 4000 ABS_Y 4000 ABS_PRESSURE 78 --- SYN_REPORT (0) ---------- libinput usually ignores any BTN_TOOL_* <= num_slots since we expect that the slot values are valid. Make an exception for the serial synaptics touchpads. If a touch has ended when the fake touch goes above active-slots (but still within num-slots), move that touch back to UPDATE. This ensures the right number of nfingers_down. When the touch restarts again in the next frame, tp_begin_touch() will skip over re-initializing it because it's already in UPDATE anyway. Note that at this point this only handles the transition _to_ TRIPLETAP, not from TRIPLETAP to DOUBLETAP. Need to wait for this to be seen in the wild first. https://bugs.freedesktop.org/show_bug.cgi?id=91352 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Hallelujah-expressed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> |
||
|---|---|---|
| .. | ||
| 50-litest.conf | ||
| build-cxx.cc | ||
| build-pedantic.c | ||
| device.c | ||
| gestures.c | ||
| keyboard.c | ||
| litest-device-alps-dualpoint.c | ||
| litest-device-alps-semi-mt.c | ||
| litest-device-atmel-hover.c | ||
| litest-device-bcm5974.c | ||
| litest-device-elantech-touchpad.c | ||
| litest-device-generic-singletouch.c | ||
| litest-device-keyboard-razer-blackwidow.c | ||
| litest-device-keyboard.c | ||
| litest-device-logitech-trackball.c | ||
| litest-device-magic-trackpad.c | ||
| litest-device-mouse-low-dpi.c | ||
| litest-device-mouse-roccat.c | ||
| litest-device-mouse.c | ||
| litest-device-ms-surface-cover.c | ||
| litest-device-nexus4-touch-screen.c | ||
| litest-device-protocol-a-touch-screen.c | ||
| litest-device-qemu-usb-tablet.c | ||
| litest-device-synaptics-hover.c | ||
| litest-device-synaptics-st.c | ||
| litest-device-synaptics-t440.c | ||
| litest-device-synaptics-x1-carbon-3rd.c | ||
| litest-device-synaptics.c | ||
| litest-device-touch-screen.c | ||
| litest-device-trackpoint.c | ||
| litest-device-vmware-virtual-usb-mouse.c | ||
| litest-device-wacom-intuos-finger.c | ||
| litest-device-wacom-touch.c | ||
| litest-device-wheel-only.c | ||
| litest-device-xen-virtual-pointer.c | ||
| litest-int.h | ||
| litest-selftest.c | ||
| litest.c | ||
| litest.h | ||
| log.c | ||
| Makefile.am | ||
| misc.c | ||
| path.c | ||
| pointer.c | ||
| symbols-leak-test.in | ||
| touch.c | ||
| touchpad-tap.c | ||
| touchpad.c | ||
| trackpoint.c | ||
| udev.c | ||
| valgrind.suppressions | ||