diff options
author | Caibin Chen <tigersoldi@gmail.com> | 2015-12-13 22:27:55 -0800 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2016-01-11 10:11:32 +1000 |
commit | b3f11180e337d6cd7fd997685b65e5ed48acc661 (patch) | |
tree | 858bc7c841ba42cb34f6da4149959c21fed97833 /src | |
parent | a340736e9b9399f630ff4b436930c1dee26cb803 (diff) |
touchpad: fix DWT pairing for Macbook Pro 2015
Label internal keyboards through the udev hwdb and only pair the internal
(usb) Apple touchpads with those keyboards labelled as such.
https://bugs.freedesktop.org/show_bug.cgi?id=93367
Co-authored-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/evdev-mt-touchpad.c | 9 | ||||
-rw-r--r-- | src/evdev.c | 1 | ||||
-rw-r--r-- | src/evdev.h | 1 | ||||
-rw-r--r-- | src/libinput-util.h | 1 |
4 files changed, 12 insertions, 0 deletions
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index d78a54b0..aa123cd4 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1285,6 +1285,8 @@ tp_want_dwt(struct evdev_device *touchpad, { unsigned int bus_tp = libevdev_get_id_bustype(touchpad->evdev), bus_kbd = libevdev_get_id_bustype(keyboard->evdev); + unsigned int vendor_tp = evdev_device_get_id_vendor(touchpad); + unsigned int vendor_kbd = evdev_device_get_id_vendor(keyboard); if (tp_dwt_device_is_blacklisted(touchpad) || tp_dwt_device_is_blacklisted(keyboard)) @@ -1295,6 +1297,13 @@ tp_want_dwt(struct evdev_device *touchpad, if (bus_tp == BUS_I8042 && bus_kbd != bus_tp) return false; + /* For Apple touchpads, always use its internal keyboard */ + if (vendor_tp == VENDOR_ID_APPLE) { + return vendor_kbd == vendor_tp && + keyboard->model_flags & + EVDEV_MODEL_APPLE_INTERNAL_KEYBOARD; + } + /* everything else we don't really know, so we have to assume they go together */ diff --git a/src/evdev.c b/src/evdev.c index 37080725..a6d8a604 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1662,6 +1662,7 @@ evdev_read_model_flags(struct evdev_device *device) { "LIBINPUT_MODEL_SYNAPTICS_SERIAL_TOUCHPAD", EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD }, { "LIBINPUT_MODEL_JUMPING_SEMI_MT", EVDEV_MODEL_JUMPING_SEMI_MT }, { "LIBINPUT_MODEL_ELANTECH_TOUCHPAD", EVDEV_MODEL_ELANTECH_TOUCHPAD }, + { "LIBINPUT_MODEL_APPLE_INTERNAL_KEYBOARD", EVDEV_MODEL_APPLE_INTERNAL_KEYBOARD }, { NULL, EVDEV_MODEL_DEFAULT }, }; const struct model_map *m = model_map; diff --git a/src/evdev.h b/src/evdev.h index 36bf7b42..97177ec2 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -108,6 +108,7 @@ enum evdev_device_model { EVDEV_MODEL_JUMPING_SEMI_MT = (1 << 10), EVDEV_MODEL_ELANTECH_TOUCHPAD = (1 << 11), EVDEV_MODEL_LENOVO_X220_TOUCHPAD_FW81 = (1 << 12), + EVDEV_MODEL_APPLE_INTERNAL_KEYBOARD = (1 << 13), }; struct mt_slot { diff --git a/src/libinput-util.h b/src/libinput-util.h index a627e5d4..25de8e5d 100644 --- a/src/libinput-util.h +++ b/src/libinput-util.h @@ -38,6 +38,7 @@ #define VENDOR_ID_APPLE 0x5ac #define VENDOR_ID_WACOM 0x56a #define VENDOR_ID_SYNAPTICS_SERIAL 0x002 +#define PRODUCT_ID_APPLE_KBD_TOUCHPAD 0x273 #define PRODUCT_ID_SYNAPTICS_SERIAL 0x007 /* The HW DPI rate we normalize to before calculating pointer acceleration */ |