diff --git a/src/evdev.c b/src/evdev.c index 029f0290..7d023c0c 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -693,6 +693,22 @@ evdev_device_calibrate(struct evdev_device *device, float calibration[6]) memcpy(device->abs.calibration, calibration, sizeof device->abs.calibration); } +int +evdev_device_has_capability(struct evdev_device *device, + enum libinput_device_capability capability) +{ + switch (capability) { + case LIBINPUT_DEVICE_CAP_POINTER: + return !!(device->seat_caps & EVDEV_DEVICE_POINTER); + case LIBINPUT_DEVICE_CAP_KEYBOARD: + return !!(device->seat_caps & EVDEV_DEVICE_KEYBOARD); + case LIBINPUT_DEVICE_CAP_TOUCH: + return !!(device->seat_caps & EVDEV_DEVICE_TOUCH); + default: + return 0; + } +} + void evdev_device_remove(struct evdev_device *device) { diff --git a/src/evdev.h b/src/evdev.h index 3fa8e1dd..e11af5d9 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -152,6 +152,10 @@ evdev_device_get_output(struct evdev_device *device); void evdev_device_calibrate(struct evdev_device *device, float calibration[6]); +int +evdev_device_has_capability(struct evdev_device *device, + enum libinput_device_capability capability); + void evdev_device_remove(struct evdev_device *device); diff --git a/src/libinput.c b/src/libinput.c index c738eeb7..a563e944 100644 --- a/src/libinput.c +++ b/src/libinput.c @@ -961,3 +961,11 @@ libinput_device_calibrate(struct libinput_device *device, { evdev_device_calibrate((struct evdev_device *) device, calibration); } + +LIBINPUT_EXPORT int +libinput_device_has_capability(struct libinput_device *device, + enum libinput_device_capability capability) +{ + return evdev_device_has_capability((struct evdev_device *) device, + capability); +} diff --git a/src/libinput.h b/src/libinput.h index f24d49d5..b591bd0e 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -667,4 +667,15 @@ void libinput_device_calibrate(struct libinput_device *device, float calibration[6]); +/** + * @ingroup device + * + * Check if the given device has the specified capability + * + * @return 1 if the given device has the capability or 0 if not + */ +int +libinput_device_has_capability(struct libinput_device *device, + enum libinput_device_capability capability); + #endif /* LIBINPUT_H */