backends/native: Set up trackball/trackpoint capabilities
Use udev to detect these features in input devices. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2617>
This commit is contained in:
parent
3ca78fa44a
commit
d274d4359f
@ -1350,10 +1350,28 @@ determine_device_type (struct libinput_device *ldev)
|
|||||||
return CLUTTER_EXTENSION_DEVICE;
|
return CLUTTER_EXTENSION_DEVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
has_udev_property (struct udev_device *udev_device,
|
||||||
|
const char *property)
|
||||||
|
{
|
||||||
|
struct udev_device *parent_udev_device;
|
||||||
|
|
||||||
|
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)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return udev_device_get_property_value (parent_udev_device, property) != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static ClutterInputCapabilities
|
static ClutterInputCapabilities
|
||||||
translate_device_capabilities (struct libinput_device *ldev)
|
translate_device_capabilities (struct libinput_device *ldev)
|
||||||
{
|
{
|
||||||
ClutterInputCapabilities caps = 0;
|
ClutterInputCapabilities caps = 0;
|
||||||
|
struct udev_device *udev_device;
|
||||||
|
|
||||||
/* This setting is specific to touchpads and alike, only in these
|
/* This setting is specific to touchpads and alike, only in these
|
||||||
* devices there is this additional layer of touch event interpretation.
|
* devices there is this additional layer of touch event interpretation.
|
||||||
@ -1371,6 +1389,18 @@ translate_device_capabilities (struct libinput_device *ldev)
|
|||||||
if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_KEYBOARD))
|
if (libinput_device_has_capability (ldev, LIBINPUT_DEVICE_CAP_KEYBOARD))
|
||||||
caps |= CLUTTER_INPUT_CAPABILITY_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;
|
||||||
|
|
||||||
|
udev_device_unref (udev_device);
|
||||||
|
}
|
||||||
|
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user