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 <[email protected]> --- src/libinput-private.h | 13 +++++++++ src/libinput.c | 33 +++++++++++++++++++++++ src/libinput.h | 73 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 1 deletion(-) diff --git a/src/libinput-private.h b/src/libinput-private.h index 61cdc79..020167e 100644 --- a/src/libinput-private.h +++ b/src/libinput-private.h @@ -69,12 +69,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 (*enable)(struct libinput_device *device, + int enable); + int (*is_enabled)(struct libinput_device *device); + void (*reset)(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 6b7e8b8..6a713bb 100644 --- a/src/libinput.c +++ b/src/libinput.c @@ -1182,3 +1182,36 @@ libinput_event_touch_get_base_event(struct libinput_event_touch *event) { return &event->base; } + +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_enable(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->enable(device, enable); +} + +LIBINPUT_EXPORT int +libinput_device_config_tap_is_enabled(struct libinput_device *device) +{ + if (libinput_device_config_tap_get_finger_count(device) == 0) + return 0; + + return device->config.tap->is_enabled(device); +} + +LIBINPUT_EXPORT void +libinput_device_config_tap_reset(struct libinput_device *device) +{ + if (device->config.tap) + device->config.tap->reset(device); +} diff --git a/src/libinput.h b/src/libinput.h index c9ec71a..0c84547 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1362,8 +1362,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() 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_enable + * @see libinput_device_config_tap_is_enabled + * @see libinput_device_config_tap_reset + */ +int +libinput_device_config_tap_get_finger_count(struct libinput_device *device); + +/** + * @ingroup config + * + * Enable 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_is_enabled + * @see libinput_device_config_tap_reset + */ +enum libinput_config_status +libinput_device_config_tap_enable(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_enable + * @see libinput_device_config_tap_reset + */ +int +libinput_device_config_tap_is_enabled(struct libinput_device *device); + +/** + * @ingroup config + * + * Reset tapping to the default configuration for this device. If the device + * does not support tapping, this function does nothing. + * + * @param device The device to configure + * + * @see libinput_device_config_tap_get_finger_count + * @see libinput_device_config_tap_enable + * @see libinput_device_config_tap_is_enabled + */ +void +libinput_device_config_tap_reset(struct libinput_device *device); + #ifdef __cplusplus } #endif - #endif /* LIBINPUT_H */ -- 1.9.0 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
