[PATCH weston] libinput-device: use the discrete axis value for wheel events

Jonas Ã…dahl jadahl at gmail.com
Tue Jan 13 23:30:11 PST 2015


On Wed, Jan 14, 2015 at 04:02:47PM +1000, Peter Hutterer wrote:
> libinput < 0.8 sent wheel click events with value 10. Since 0.8
> the value is the angle of the click in degrees but it now provides
> the click count as separate value. To keep backwards-compat with
> existing clients, we just send multiples of the click count.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> Use the new discrete axis values for scroll wheels to maintain backwards
> compatibility. This isn't merged in libinput yet but I think at this point
> it's just a discussion re naming so worst case this patch would need a
> search/replace.
> 
> But to get an early review, here it is.
> 
>  src/libinput-device.c | 30 ++++++++++++++++++++++++++----
>  1 file changed, 26 insertions(+), 4 deletions(-)
> 
> diff --git a/src/libinput-device.c b/src/libinput-device.c
> index e68b54d..9451675 100644
> --- a/src/libinput-device.c
> +++ b/src/libinput-device.c
> @@ -126,6 +126,30 @@ handle_pointer_button(struct libinput_device *libinput_device,
>  		      libinput_event_pointer_get_button_state(pointer_event));
>  }
>  
> +static int
> +normalize_scroll(struct libinput_event_pointer *pointer_event,
> +		 enum libinput_pointer_axis axis)
> +{
> +	enum libinput_pointer_axis_source source;
> +	double value;
> +
> +	source = libinput_event_pointer_get_axis_source(pointer_event);
> +	/* libinput < 0.8 sent wheel click events with value 10. Since 0.8
> +	   the value is the angle of the click in degrees. To keep
> +	   backwards-compat with existing clients, we just send multiples of
> +	   the click count.
> +	 */
> +	if (source == LIBINPUT_POINTER_AXIS_SOURCE_WHEEL)
> +		value = 10 * libinput_event_pointer_get_axis_value_discrete(
> +							   pointer_event,
> +							   axis);
> +	else
> +		value = libinput_event_pointer_get_axis_value(pointer_event,
> +							      axis);

Considering now that the meaning of axis event values depends on where
they came from, should we maybe instead use a switch case or at least not
use potentially incorrect get_axis_value for future axis source types?


Jonas

> +
> +	return value;
> +}
> +
>  static void
>  handle_pointer_axis(struct libinput_device *libinput_device,
>  		    struct libinput_event_pointer *pointer_event)
> @@ -137,8 +161,7 @@ handle_pointer_axis(struct libinput_device *libinput_device,
>  
>  	axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL;
>  	if (libinput_event_pointer_has_axis(pointer_event, axis)) {
> -		value = libinput_event_pointer_get_axis_value(pointer_event,
> -							      axis);
> +		value = normalize_scroll(pointer_event, axis);
>  		notify_axis(device->seat,
>  			    libinput_event_pointer_get_time(pointer_event),
>  			    WL_POINTER_AXIS_VERTICAL_SCROLL,
> @@ -147,8 +170,7 @@ handle_pointer_axis(struct libinput_device *libinput_device,
>  
>  	axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL;
>  	if (libinput_event_pointer_has_axis(pointer_event, axis)) {
> -		value = libinput_event_pointer_get_axis_value(pointer_event,
> -							      axis);
> +		value = normalize_scroll(pointer_event, axis);
>  		notify_axis(device->seat,
>  			    libinput_event_pointer_get_time(pointer_event),
>  			    WL_POINTER_AXIS_HORIZONTAL_SCROLL,
> -- 
> 2.1.0
> 


More information about the wayland-devel mailing list