Submitted By: Armin K. Date: 2015-01-16 Initial Package Version: 1.6.0 Upstream Status: Fixed Origin: Upstream Description: Fixes building with libinput-0.8.0 --- a/src/libinput-device.c 2014-09-17 15:41:56.000000000 +0200 +++ b/src/libinput-device.c 2015-01-16 02:43:31.425340998 +0100 @@ -126,6 +126,44 @@ libinput_event_pointer_get_button_state(pointer_event)); } +static double +normalize_scroll(struct libinput_event_pointer *pointer_event, + enum libinput_pointer_axis axis) +{ + static int warned; + 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. + */ + switch (source) { + case LIBINPUT_POINTER_AXIS_SOURCE_WHEEL: + value = 10 * libinput_event_pointer_get_axis_value_discrete( + pointer_event, + axis); + break; + case LIBINPUT_POINTER_AXIS_SOURCE_FINGER: + case LIBINPUT_POINTER_AXIS_SOURCE_CONTINUOUS: + value = libinput_event_pointer_get_axis_value(pointer_event, + axis); + break; + default: + value = 0; + if (warned < 5) { + weston_log("Unknown scroll source %d. Event discarded\n", + source); + warned++; + } + break; + } + + return value; +} + static void handle_pointer_axis(struct libinput_device *libinput_device, struct libinput_event_pointer *pointer_event) @@ -133,12 +171,25 @@ struct evdev_device *device = libinput_device_get_user_data(libinput_device); double value; + enum libinput_pointer_axis axis; + + axis = LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL; + if (libinput_event_pointer_has_axis(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, + wl_fixed_from_double(value)); + } - value = libinput_event_pointer_get_axis_value(pointer_event); - notify_axis(device->seat, - libinput_event_pointer_get_time(pointer_event), - libinput_event_pointer_get_axis(pointer_event), - wl_fixed_from_double(value)); + axis = LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL; + if (libinput_event_pointer_has_axis(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, + wl_fixed_from_double(value)); + } } static void