Bluetooth devices tagged with ID_INPUT_TABLET aren't tagged on the device,
but on the parent instead. Match the parent for a tag before bailing out.

Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
---
Changes to v1:
- localise parent usage
- use temporary variables for is_tablet/is_touchpad

I'll have another test of this tomorrow, but I do remember it working on th
e I4 WL.

 libwacom/libwacom.c |   18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c
index dd6ba1c..9e32618 100644
--- a/libwacom/libwacom.c
+++ b/libwacom/libwacom.c
@@ -71,10 +71,23 @@ get_device_info (const char   *path,
        /* Touchpads are only for the "Finger" part of Bamboo devices */
        if (g_udev_device_get_property_as_boolean (device, "ID_INPUT_TABLET") 
== FALSE &&
            g_udev_device_get_property_as_boolean (device, "ID_INPUT_TOUCHPAD") 
== FALSE) {
-               libwacom_error_set(error, WERROR_INVALID_PATH, "Device '%s' is 
not a tablet", path);
-               goto bail;
+               GUdevDevice *parent;
+               gboolean is_tablet, is_touchpad;
+
+
+               parent = g_udev_device_get_parent(device);
+               is_tablet = g_udev_device_get_property_as_boolean (parent, 
"ID_INPUT_TABLET");
+               is_touchpad = g_udev_device_get_property_as_boolean (parent, 
"ID_INPUT_TOUCHPAD");
+               if (!parent || (!is_tablet && !is_touchpad)) {
+                               libwacom_error_set(error, WERROR_INVALID_PATH, 
"Device '%s' is not a tablet", path);
+                               goto bail;
+               }
+               g_object_unref (parent);
        }
 
+       /* FIXME: ID_BUS on the device is usb even for bluetooth devices,
+        * but ID_BUS on the parent is NULL.
+        */
        bus_str = g_udev_device_get_property (device, "ID_BUS");
        /* Serial devices are weird */
        if (bus_str == NULL) {
@@ -86,7 +99,6 @@ get_device_info (const char   *path,
                GUdevDevice *parent;
 
                parent = g_udev_device_get_parent (device);
-
                g_object_unref (device);
                device = parent;
                bus_str = "bluetooth";
-- 
1.7.10


------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to