Hi, On 06/03/2014 07:35 AM, Peter Hutterer wrote: > Signed-off-by: Peter Hutterer <peter.hutte...@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 > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel