[PATCH libinput 10/10] Add config api for middle button emulation

Hans de Goede hdegoede at redhat.com
Wed Jun 4 02:49:02 PDT 2014


Hi,

On 06/03/2014 07:35 AM, Peter Hutterer wrote:
> ---
>  src/libinput-private.h |  8 ++++++++
>  src/libinput.c         | 33 ++++++++++++++++++++++++++++++
>  src/libinput.h         | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 95 insertions(+)
> 
> diff --git a/src/libinput-private.h b/src/libinput-private.h
> index 22220de..28f071a 100644
> --- a/src/libinput-private.h
> +++ b/src/libinput-private.h
> @@ -120,6 +120,13 @@ struct libinput_device_config_pointer_mode {
>  	void (*reset)(struct libinput_device *device);
>  };
>  
> +struct libinput_device_config_middlebutton_emulation {
> +	int (*available)(struct libinput_device *device);
> +	int (*enable)(struct libinput_device *device, int enable);
> +	int (*is_enabled)(struct libinput_device *device);
> +	void (*reset)(struct libinput_device *device);
> +};
> +

Again set / get / get_default ?  Other then that this looks good.

Regards,

Hans


>  struct libinput_device_config {
>  	struct libinput_device_config_tap *tap;
>  	struct libinput_device_config_scroll *scroll;
> @@ -127,6 +134,7 @@ struct libinput_device_config {
>  	struct libinput_device_config_accel *accel;
>  	struct libinput_device_config_disable_while_typing *dwt;
>  	struct libinput_device_config_pointer_mode *mode;
> +	struct libinput_device_config_middlebutton_emulation *mbemu;
>  };
>  
>  struct libinput_device {
> diff --git a/src/libinput.c b/src/libinput.c
> index 5324407..bd06960 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -1406,3 +1406,36 @@ libinput_device_config_pointer_mode_reset(struct libinput_device *device)
>  	if (device->config.mode)
>  		device->config.mode->reset(device);
>  }
> +
> +LIBINPUT_EXPORT int
> +libinput_device_config_middlebutton_emulation_is_available(struct libinput_device *device)
> +{
> +	return device->config.mbemu ?
> +		device->config.mbemu->available(device) : 0;
> +}
> +
> +LIBINPUT_EXPORT enum libinput_config_status
> +libinput_device_config_middlebutton_emulation_enable(struct libinput_device *device,
> +						     int enable)
> +{
> +	if (!libinput_device_config_middlebutton_emulation_is_available(device))
> +		return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
> +
> +	return device->config.mbemu->enable(device, enable);
> +}
> +
> +LIBINPUT_EXPORT int
> +libinput_device_config_middlebutton_emulation_is_enabled(struct libinput_device *device)
> +{
> +	if (!libinput_device_config_middlebutton_emulation_is_available(device))
> +		return 0;
> +
> +	return device->config.mbemu->is_enabled(device);
> +}
> +
> +LIBINPUT_EXPORT void
> +libinput_device_config_middlebutton_emulation_reset(struct libinput_device *device)
> +{
> +	if (device->config.mbemu)
> +		device->config.mbemu->reset(device);
> +}
> diff --git a/src/libinput.h b/src/libinput.h
> index 1a51b82..b78283f 100644
> --- a/src/libinput.h
> +++ b/src/libinput.h
> @@ -1789,6 +1789,60 @@ libinput_device_config_pointer_mode_get_mode(struct libinput_device *device);
>  void
>  libinput_device_config_pointer_mode_reset(struct libinput_device *device);
>  
> +/**
> + * @ingroup config
> + *
> + * Devices without a physical middle button may provide middle-button
> + * emulation by pressing the left and the right button simultaneously.
> + *
> + * @param device The device to configure
> + *
> + * @return 1 if available, 0 if not available
> + */
> +int
> +libinput_device_config_middlebutton_emulation_is_available(struct libinput_device *device);
> +
> +/**
> + * @ingroup config
> + *
> + * Enable or disable middle button emulation on this device. Note that
> + * enabling middle button emulation causes a delay in the delivery of button
> + * events.
> + *
> + * @param device The device to configure
> + * @param enable 1 to enable, 0 to disable
> + *
> + * @return A config status code
> + */
> +enum libinput_config_status
> +libinput_device_config_middlebutton_emulation_enable(struct libinput_device *device,
> +						     int enable);
> +
> +/**
> + * @ingroup config
> + *
> + * Check if middle button emulation is enabled on this device. If the device
> + * does not support middle button emulation, this function returns 0.
> + *
> + * @param device The device to configure
> + *
> + * @return 0 if disabled, 1 if enabled
> + */
> +int
> +libinput_device_config_middlebutton_emulation_is_enabled(struct libinput_device *device);
> +
> +/**
> + * @ingroup config
> + *
> + * Reset to the default emulation status. If the device does not support
> + * middle button emulation, this function does nothing.
> + *
> + * @param device The device to configure
> + *
> + */
> +void
> +libinput_device_config_middlebutton_emulation_reset(struct libinput_device *device);
> +
>  
>  #ifdef __cplusplus
>  }
> 


More information about the wayland-devel mailing list