[mutter/wip/carlosg/capabilities-and-dimensions: 2/11] backends/native: Set up trackball/trackpoint capabilities




commit e4acf88207ce2d0d7bc4ffd5009455d3a4159728
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Sep 6 09:46:42 2022 +0200

    backends/native: Set up trackball/trackpoint capabilities
    
    Use udev to detect these features in input devices.

 src/backends/native/meta-input-device-native.c | 32 ++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
---
diff --git a/src/backends/native/meta-input-device-native.c b/src/backends/native/meta-input-device-native.c
index 380dda4f56..cbd334b047 100644
--- a/src/backends/native/meta-input-device-native.c
+++ b/src/backends/native/meta-input-device-native.c
@@ -1350,10 +1350,32 @@ determine_device_type (struct libinput_device *ldev)
     return CLUTTER_EXTENSION_DEVICE;
 }
 
+static gboolean
+has_udev_property (struct udev_device *udev_device,
+                   const char         *property)
+{
+  struct udev_device *parent_udev_device;
+  gboolean exists = FALSE;
+
+  if (NULL != udev_device_get_property_value (udev_device, property))
+    return TRUE;
+
+  parent_udev_device = udev_device_get_parent (udev_device);
+
+  if (parent_udev_device)
+    {
+      exists = udev_device_get_property_value (parent_udev_device, property) != NULL;
+      udev_device_unref (parent_udev_device);
+    }
+
+  return exists;
+}
+
 static ClutterInputCapabilities
 translate_device_capabilities (struct libinput_device *ldev)
 {
   ClutterInputCapabilities caps = 0;
+  struct udev_device *udev_device;
 
   /* This setting is specific to touchpads and alike, only in these
    * devices there is this additional layer of touch event interpretation.
@@ -1371,6 +1393,16 @@ translate_device_capabilities (struct libinput_device *ldev)
   if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_KEYBOARD))
     caps |= CLUTTER_INPUT_CAPABILITY_KEYBOARD;
 
+  udev_device = libinput_device_get_udev_device (ldev);
+
+  if (udev_device)
+    {
+      if (has_udev_property (udev_device, "ID_INPUT_TRACKBALL"))
+        caps |= CLUTTER_INPUT_CAPABILITY_TRACKBALL;
+      if (has_udev_property (udev_device, "ID_INPUT_POINTINGSTICK"))
+        caps |= CLUTTER_INPUT_CAPABILITY_TRACKPOINT;
+    }
+
   return caps;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]