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>
This commit is contained in:
Peter Hutterer 2014-01-07 11:42:32 +10:00
parent 4b88bf30d4
commit 401592870d
3 changed files with 120 additions and 1 deletions

View file

@ -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);

View file

@ -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);
}

View file

@ -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 */