mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-26 23:50:06 +01:00
touchpad: only reduce the slot count for ALPS serial touchpads
We're getting too many regressions on other devices for this feature and only ALPS touchpads need it (it's a kernel driver bug). So let's limit this to those devices only. For example, synaptics serial touchpads don't keep the fake fingers and slot states in sync when going from two to three fingers, causing an erroneous slot downgrade. See https://gitlab.freedesktop.org/libinput/libinput/issues/434#note_419912 That interferes with this code but fixing it is hard and anyway, synaptics touchpads don't need the slot count drop. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
c7f06b0bdd
commit
cd5af1a4f6
3 changed files with 7 additions and 2 deletions
|
|
@ -645,12 +645,14 @@ tp_process_fake_touches(struct tp_dispatch *tp,
|
|||
EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD)
|
||||
tp_restore_synaptics_touches(tp, time);
|
||||
|
||||
/* ALPS touchpads always set 3 slots in the kernel, even
|
||||
/* ALPS serial touchpads always set 3 slots in the kernel, even
|
||||
* where they support less than that. So we get BTN_TOOL_TRIPLETAP
|
||||
* but never slot 2 because our slot count is wrong.
|
||||
* This also means that the third touch falls through the cracks and
|
||||
* is ignored.
|
||||
*
|
||||
* See https://gitlab.freedesktop.org/libinput/libinput/issues/408
|
||||
*
|
||||
* All touchpad devices have at least one slot so we only do this
|
||||
* for 2 touches or higher.
|
||||
*
|
||||
|
|
@ -665,7 +667,8 @@ tp_process_fake_touches(struct tp_dispatch *tp,
|
|||
* For a long explanation of what happens, see
|
||||
* https://gitlab.freedesktop.org/libevdev/libevdev/merge_requests/19
|
||||
*/
|
||||
if (nfake_touches > 1 && tp->has_mt &&
|
||||
if (tp->device->model_flags & EVDEV_MODEL_ALPS_SERIAL_TOUCHPAD &&
|
||||
nfake_touches > 1 && tp->has_mt &&
|
||||
tp->nactive_slots > 0 &&
|
||||
nfake_touches > tp->nactive_slots &&
|
||||
tp->nactive_slots < tp->num_slots) {
|
||||
|
|
|
|||
|
|
@ -1384,6 +1384,7 @@ evdev_read_model_flags(struct evdev_device *device)
|
|||
#define MODEL(name) { QUIRK_MODEL_##name, EVDEV_MODEL_##name }
|
||||
MODEL(WACOM_TOUCHPAD),
|
||||
MODEL(SYNAPTICS_SERIAL_TOUCHPAD),
|
||||
MODEL(ALPS_SERIAL_TOUCHPAD),
|
||||
MODEL(LENOVO_T450_TOUCHPAD),
|
||||
MODEL(TRACKBALL),
|
||||
MODEL(APPLE_TOUCHPAD_ONEBUTTON),
|
||||
|
|
|
|||
|
|
@ -108,6 +108,7 @@ enum evdev_device_model {
|
|||
EVDEV_MODEL_DEFAULT = 0,
|
||||
EVDEV_MODEL_WACOM_TOUCHPAD = bit(1),
|
||||
EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD = bit(2),
|
||||
EVDEV_MODEL_ALPS_SERIAL_TOUCHPAD = bit(3),
|
||||
EVDEV_MODEL_LENOVO_T450_TOUCHPAD = bit(4),
|
||||
EVDEV_MODEL_APPLE_TOUCHPAD_ONEBUTTON = bit(5),
|
||||
EVDEV_MODEL_LENOVO_SCROLLPOINT = bit(6),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue