[mutter/wip/carlosg/capabilities-and-dimensions: 2/11] backends/native: Set up trackball/trackpoint capabilities
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/capabilities-and-dimensions: 2/11] backends/native: Set up trackball/trackpoint capabilities
- Date: Tue, 6 Sep 2022 15:38:34 +0000 (UTC)
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]