On Thu, 2012-04-19 at 13:16 +1000, Peter Hutterer wrote:
> 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 thought more:
static gboolean
is_tablet_or_touchpad (GUdevDevice *device)
{
   return g_udev_device_get_property_as_boolean (device, "ID_INPUT_TABLET") ||
          g_udev_device_get_property_as_boolean (device, "ID_INPUT_TOUCHPAD");
}

And use that in the 2 locations below.

> 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";



------------------------------------------------------------------------------
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