[PATCH libinput] touchpad: only pair internal trackpoint devices with internal touchpads

Peter Hutterer peter.hutterer at who-t.net
Tue Apr 14 14:58:14 PDT 2015


Internal touchpads with trackpoints are either BUS_I8042 or BUS_I2C, but not
BUS_USB/BUS_BLUETOOTH. Lenovo sells external keyboards with a trackpoint
built-in, make sure we don't pair that trackpoint with the internal
touchpad. And likewise, an internal trackpoint should not be paired with
an external USB touchpad device (the current code pairs the trackpoint with
any Wacom touch device in addition to the normal touchpad pairing).

Lenovo had one external device that has a trackpoint and a touchpad on an
external keyboard. That device won't be covered with this patch, if we have a
user we can re-consider.

https://bugs.freedesktop.org/show_bug.cgi?id=89935

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/evdev-mt-touchpad.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index a663db9..aa59869 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -825,9 +825,16 @@ tp_device_added(struct evdev_device *device,
 		struct evdev_device *added_device)
 {
 	struct tp_dispatch *tp = (struct tp_dispatch*)device->dispatch;
+	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;
+
+	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 &&
-	    (added_device->tags & EVDEV_TAG_TRACKPOINT)) {
+	    (added_device->tags & EVDEV_TAG_TRACKPOINT) &&
+	    tp_is_internal && trp_is_internal) {
 		/* Don't send any pending releases to the new trackpoint */
 		tp->buttons.active_is_topbutton = false;
 		tp->buttons.trackpoint = added_device;
-- 
2.3.4



More information about the wayland-devel mailing list