[PATCH libinput 09/10] Add config API for pointer modes

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


Hi,

On 06/03/2014 07:35 AM, Peter Hutterer wrote:
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  src/libinput-private.h |  9 ++++++
>  src/libinput.c         | 37 ++++++++++++++++++++++++
>  src/libinput.h         | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 123 insertions(+)
> 
> diff --git a/src/libinput-private.h b/src/libinput-private.h
> index 9a3e629..22220de 100644
> --- a/src/libinput-private.h
> +++ b/src/libinput-private.h
> @@ -112,12 +112,21 @@ struct libinput_device_config_disable_while_typing {
>  	void (*reset)(struct libinput_device *device);
>  };
>  
> +struct libinput_device_config_pointer_mode {
> +	int (*modes)(struct libinput_device *device);
> +	enum libinput_config_status (*set)(struct libinput_device *device,
> +					   enum libinput_device_pointer_mode);
> +	enum libinput_device_pointer_mode (*get)(struct libinput_device *device);
> +	void (*reset)(struct libinput_device *device);
> +};
> +
>  struct libinput_device_config {
>  	struct libinput_device_config_tap *tap;
>  	struct libinput_device_config_scroll *scroll;
>  	struct libinput_device_config_rotation *rotation;
>  	struct libinput_device_config_accel *accel;
>  	struct libinput_device_config_disable_while_typing *dwt;
> +	struct libinput_device_config_pointer_mode *mode;
>  };
>  
>  struct libinput_device {
> diff --git a/src/libinput.c b/src/libinput.c
> index 33a8e90..5324407 100644
> --- a/src/libinput.c
> +++ b/src/libinput.c
> @@ -1369,3 +1369,40 @@ libinput_device_config_disable_while_typing_reset(struct libinput_device *device
>  	if (device->config.dwt)
>  		device->config.dwt->reset(device);
>  }
> +
> +LIBINPUT_EXPORT unsigned int
> +libinput_device_config_pointer_mode_get_modes(struct libinput_device *device)
> +{
> +	return device->config.mode ?
> +		device->config.mode->modes(device) :
> +		LIBINPUT_POINTER_MODE_NATIVE_ONLY;
> +}
> +
> +LIBINPUT_EXPORT enum libinput_config_status
> +libinput_device_config_pointer_mode_set_mode(struct libinput_device *device,
> +					     enum libinput_device_pointer_mode mode)
> +{
> +	if (libinput_device_config_pointer_mode_get_modes(device) ==
> +		    LIBINPUT_POINTER_MODE_NATIVE_ONLY &&
> +	    mode != LIBINPUT_POINTER_MODE_NATIVE_ONLY)
> +		return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
> +
> +	return device->config.mode->set(device, mode);
> +}
> +
> +LIBINPUT_EXPORT enum libinput_device_pointer_mode
> +libinput_device_config_pointer_mode_get_mode(struct libinput_device *device)
> +{
> +	if (libinput_device_config_pointer_mode_get_modes(device) ==
> +		    LIBINPUT_POINTER_MODE_NATIVE_ONLY)
> +		return LIBINPUT_POINTER_MODE_NATIVE_ONLY;
> +
> +	return device->config.mode->get(device);
> +}
> +
> +LIBINPUT_EXPORT void
> +libinput_device_config_pointer_mode_reset(struct libinput_device *device)
> +{
> +	if (device->config.mode)
> +		device->config.mode->reset(device);
> +}
> diff --git a/src/libinput.h b/src/libinput.h
> index 62d0c0f..1a51b82 100644
> --- a/src/libinput.h
> +++ b/src/libinput.h
> @@ -1713,6 +1713,83 @@ libinput_device_config_disable_while_typing_is_enabled(struct libinput_device *d
>  void
>  libinput_device_config_disable_while_typing_reset(struct libinput_device *device);
>  
> +/**
> + * @ingroup config
> + */
> +enum libinput_device_pointer_mode {
> +	/**
> +	 * The device only works in native mode and does not support mode
> +	 * switching. Native mode may be absolute or relative, depending on
> +	 * the device.
> +	 */
> +	LIBINPUT_POINTER_MODE_NATIVE_ONLY = 0,
> +	/**
> +	 * The device behaves like an absolute input device, e.g. like a
> +	 * touchscreen.
> +	 */
> +	LIBINPUT_POINTER_MODE_ABSOLUTE = (1 << 0),
> +	/**
> +	 * The device behaves like a relative input device, e.g. like a
> +	 * touchpad.
> +	 */
> +	LIBINPUT_POINTER_MODE_RELATIVE = (1 << 1),
> +};
> +
> +/**
> + * @ingroup config
> + *
> + * Get the supported device modes for this device. Absolute pointer devices
> + * such as graphics tablet may be used in absolute mode or relative mode.
> + *
> + * @note A device that supports relative and absolute mode may be
> + * pointer-accelerated in relative mode.

How will these interact, what will the available method of the pointer
accel return when in absolute mode ? What will the set / get methods
return ?

Regards,

Hans



> + *
> + * @param device The device to configure
> + *
> + * @return A bitmask of the available pointer modes, or
> + * POINTER_MODE_NATIVE_ONLY if the device does not allow mode switching
> + */
> +unsigned int
> +libinput_device_config_pointer_mode_get_modes(struct libinput_device *device);
> +
> +/**
> + * @ingroup config
> + *
> + * Set the pointer mode for this device.
> + *
> + * @param device The device to configure
> + * @param mode The pointer mode to switch the device to
> + *
> + * @return A config status code
> + */
> +enum libinput_config_status
> +libinput_device_config_pointer_mode_set_mode(struct libinput_device *device,
> +					     enum libinput_device_pointer_mode mode);
> +
> +/**
> + * @ingroup config
> + *
> + * Get the current pointer mode for this device.
> + *
> + * @param device The device to configure
> + *
> + * @return The current pointer mode this device is in
> + */
> +enum libinput_device_pointer_mode
> +libinput_device_config_pointer_mode_get_mode(struct libinput_device *device);
> +
> +/**
> + * @ingroup config
> + *
> + * Reset to the default mode. If the device only supports native mode, this
> + * function does nothing.
> + *
> + * @param device The device to configure
> + */
> +void
> +libinput_device_config_pointer_mode_reset(struct libinput_device *device);
> +
> +
>  #ifdef __cplusplus
>  }
>  #endif
> 


More information about the wayland-devel mailing list