From 23898beb8e2c5bd2e255e526751b4edce541d461 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 29 May 2015 12:01:14 +1000 Subject: [PATCH libinput] touchpad: only pair tracksticks with touchpads where needed On topbuttonpads we need the trackstick pairing to generate the right software buttons, on the X1 Carbon-like devices we need the pairing to route the buttons correctly (though this code is obsolete with newer kernels). This fixes the touchpad being unresponsive while the trackpoint is in use. https://bugs.freedesktop.org/show_bug.cgi?id=90731 Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index eacec6e..f8593a9 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1060,11 +1060,17 @@ tp_interface_device_added(struct evdev_device *device, unsigned int bus_tp = libevdev_get_id_bustype(device->evdev), bus_trp = libevdev_get_id_bustype(added_device->evdev); bool tp_is_internal, trp_is_internal; + bool want_trackpoint_pairing = false; tp_is_internal = bus_tp != BUS_USB && bus_tp != BUS_BLUETOOTH; trp_is_internal = bus_trp != BUS_USB && bus_trp != BUS_BLUETOOTH; - if (tp->buttons.trackpoint == NULL && + if (tp->buttons.has_topbuttons || + device->tags & EVDEV_TAG_TOUCHPAD_TRACKPOINT) + want_trackpoint_pairing = true; + + if (want_trackpoint_pairing && + tp->buttons.trackpoint == NULL && (added_device->tags & EVDEV_TAG_TRACKPOINT) && tp_is_internal && trp_is_internal) { /* Don't send any pending releases to the new trackpoint */ -- 2.4.1