From 8923d18d25303354f250b4f165fa66b327b8ac7e Mon Sep 17 00:00:00 2001 From: David Rosca Date: Mon, 25 Feb 2019 18:26:08 +0100 Subject: [PATCH] Also use type to match tablet tool with device On devices with tools having both serial and id 0, it would fail to create separate subdevices. Thinkpad X220T (Wacom ISDv4 E6) now correctly registers Pen and Eraser xinput devices. --- src/xf86libinput.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/xf86libinput.c b/src/xf86libinput.c index ffe09be..5792224 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -1791,7 +1791,9 @@ xf86libinput_pick_device(struct xf86libinput_device *shared_device, if (libinput_tablet_tool_get_serial(driver_data->tablet_tool) == libinput_tablet_tool_get_serial(tool) && libinput_tablet_tool_get_tool_id(driver_data->tablet_tool) == - libinput_tablet_tool_get_tool_id(tool)) + libinput_tablet_tool_get_tool_id(tool) && + libinput_tablet_tool_get_type(driver_data->tablet_tool) == + libinput_tablet_tool_get_type(tool)) return driver_data->pInfo; } } @@ -2111,13 +2113,15 @@ xf86libinput_find_device_for_tool(InputInfoPtr pInfo, struct xf86libinput_device *shared_device = driver_data->shared_device; uint64_t serial = libinput_tablet_tool_get_serial(tool); uint64_t tool_id = libinput_tablet_tool_get_tool_id(tool); + enum libinput_event_type tool_type = libinput_tablet_tool_get_type(tool); xorg_list_for_each_entry(dev, &shared_device->device_list, shared_device_link) { if (dev->tablet_tool && libinput_tablet_tool_get_serial(dev->tablet_tool) == serial && - libinput_tablet_tool_get_tool_id(dev->tablet_tool) == tool_id) { + libinput_tablet_tool_get_tool_id(dev->tablet_tool) == tool_id && + libinput_tablet_tool_get_type(dev->tablet_tool) == tool_type) { return dev->pInfo->dev; } }