[PATCH libinput 02/10] Add an interface to enable/disable tapping

Hans de Goede hdegoede at redhat.com
Wed Jun 4 01:40:33 PDT 2014


Hi,

On 06/03/2014 07:34 AM, Peter Hutterer wrote:
> 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 at who-t.net>
> ---
>  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);
> +}

Didn't we agree in an off-list discussion to add a get_default instead,
so to that ie a cmdline app for querying config info can not only display
the current value but also the device default value for a config option ?

This get_default would replace the reset, apps can simple implement that
functionality themselves through the get_default.

Regards,

Hans


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


More information about the wayland-devel mailing list