diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2014-01-07 11:42:32 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2014-07-03 13:48:44 +1000 |
commit | 401592870d3d6df3deb669387d58bf632fa0317f (patch) | |
tree | 5ed7be4f3b3fa237b48acff5da89756fdc4805ef | |
parent | 4b88bf30d43ab3ba731c9e78f011b78a484e12ed (diff) | |
download | libinput-401592870d3d6df3deb669387d58bf632fa0317f.tar.gz |
Add an interface to enable/disable tapping
Provide an interface to enable/disable tapping, with a default mapping of
1/2/3 fingers mapping to L/R/M button events, respectively.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
-rw-r--r-- | src/libinput-private.h | 13 | ||||
-rw-r--r-- | src/libinput.c | 35 | ||||
-rw-r--r-- | src/libinput.h | 73 |
3 files changed, 120 insertions, 1 deletions
diff --git a/src/libinput-private.h b/src/libinput-private.h index 00901b4d..23c51405 100644 --- a/src/libinput-private.h +++ b/src/libinput-private.h @@ -81,12 +81,25 @@ struct libinput_seat { uint32_t button_count[KEY_CNT]; }; +struct libinput_device_config_tap { + int (*count)(struct libinput_device *device); + enum libinput_config_status (*set_enabled)(struct libinput_device *device, + int enable); + int (*get_enabled)(struct libinput_device *device); + int (*get_default)(struct libinput_device *device); +}; + +struct libinput_device_config { + struct libinput_device_config_tap *tap; +}; + struct libinput_device { struct libinput_seat *seat; struct list link; void *user_data; int terminated; int refcount; + struct libinput_device_config config; }; typedef void (*libinput_source_dispatch_t)(void *data); diff --git a/src/libinput.c b/src/libinput.c index 6ea9e485..ff4b01e1 100644 --- a/src/libinput.c +++ b/src/libinput.c @@ -1275,3 +1275,38 @@ libinput_config_status_to_str(enum libinput_config_status status) return str; } + +LIBINPUT_EXPORT int +libinput_device_config_tap_get_finger_count(struct libinput_device *device) +{ + return device->config.tap ? device->config.tap->count(device) : 0; +} + +LIBINPUT_EXPORT enum libinput_config_status +libinput_device_config_tap_set_enabled(struct libinput_device *device, + int enable) +{ + if (enable && + libinput_device_config_tap_get_finger_count(device) == 0) + return LIBINPUT_CONFIG_STATUS_UNSUPPORTED; + + return device->config.tap->set_enabled(device, enable); +} + +LIBINPUT_EXPORT int +libinput_device_config_tap_get_enabled(struct libinput_device *device) +{ + if (libinput_device_config_tap_get_finger_count(device) == 0) + return 0; + + return device->config.tap->get_enabled(device); +} + +LIBINPUT_EXPORT int +libinput_device_config_tap_get_default_enabled(struct libinput_device *device) +{ + if (libinput_device_config_tap_get_finger_count(device) == 0) + return 0; + + return device->config.tap->get_default(device); +} diff --git a/src/libinput.h b/src/libinput.h index ead30646..0d4b79cb 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1436,8 +1436,79 @@ enum libinput_config_status { const char * libinput_config_status_to_str(enum libinput_config_status status); +/** + * @ingroup config + * + * Check if the device supports tap-to-click. See + * libinput_device_config_tap_set_enabled() for more information. + * + * @param device The device to configure + * @return The number of fingers that can generate a tap event, or 0 if the + * device does not support tapping. + * + * @see libinput_device_config_tap_set_enabled + * @see libinput_device_config_tap_get_enabled + * @see libinput_device_config_tap_set_enabled_get_default + */ +int +libinput_device_config_tap_get_finger_count(struct libinput_device *device); + +/** + * @ingroup config + * + * Enable or disable tap-to-click on this device, with a default mapping of + * 1, 2, 3 finger tap mapping to left, right, middle click, respectively. + * Tapping is limited by the number of simultaneous touches + * supported by the device, see + * libinput_device_config_tap_get_finger_count(). + * + * @param device The device to configure + * @param enable Non-zero to enable, zero to disable + * + * @return A config status code. Disabling tapping on a device that does not + * support tapping always succeeds. + * + * @see libinput_device_config_tap_get_finger_count + * @see libinput_device_config_tap_get_enabled + * @see libinput_device_config_tap_get_default_enabled + */ +enum libinput_config_status +libinput_device_config_tap_set_enabled(struct libinput_device *device, + int enable); + +/** + * @ingroup config + * + * Check if tap-to-click is enabled on this device. If the device does not + * support tapping, this function always returns 0. + * + * @param device The device to configure + * + * @return 1 if enabled, 0 otherwise. + * + * @see libinput_device_config_tap_get_finger_count + * @see libinput_device_config_tap_set_enabled + * @see libinput_device_config_tap_get_default_enabled + */ +int +libinput_device_config_tap_get_enabled(struct libinput_device *device); + +/** + * @ingroup config + * + * Return the default setting for whether tapping is enabled on this device. + * + * @param device The device to configure + * @return 1 if tapping is enabled by default, or 0 otherwise + * + * @see libinput_device_config_tap_get_finger_count + * @see libinput_device_config_tap_set_enabled + * @see libinput_device_config_tap_get_enabled + */ +int +libinput_device_config_tap_get_default_enabled(struct libinput_device *device); + #ifdef __cplusplus } #endif - #endif /* LIBINPUT_H */ |