Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- src/evdev-mt-touchpad-edge-scroll.c | 8 +++++--- src/evdev.c | 27 ++++++++++++++++----------- src/libinput-private.h | 8 ++++++-- src/libinput.c | 12 +++++------- 4 files changed, 32 insertions(+), 23 deletions(-)
diff --git a/src/evdev-mt-touchpad-edge-scroll.c b/src/evdev-mt-touchpad-edge-scroll.c index d33f4fd..6e24819 100644 --- a/src/evdev-mt-touchpad-edge-scroll.c +++ b/src/evdev-mt-touchpad-edge-scroll.c @@ -315,6 +315,7 @@ tp_edge_scroll_post_events(struct tp_dispatch *tp, uint64_t time) double initial_dx, initial_dy, *initial_delta; struct normalized_coords normalized; const struct normalized_coords zero = { 0.0, 0.0 }; + const struct discrete_coords zero_discrete = { 0.0, 0.0 }; if (tp->scroll.method != LIBINPUT_CONFIG_SCROLL_EDGE) return 0; @@ -331,7 +332,7 @@ tp_edge_scroll_post_events(struct tp_dispatch *tp, uint64_t time) AS_MASK(t->scroll.direction), LIBINPUT_POINTER_AXIS_SOURCE_FINGER, &zero, - 0, 0); + &zero_discrete); t->scroll.direction = -1; } continue; @@ -383,7 +384,7 @@ tp_edge_scroll_post_events(struct tp_dispatch *tp, uint64_t time) AS_MASK(axis), LIBINPUT_POINTER_AXIS_SOURCE_FINGER, &normalized, - 0, 0); + &zero_discrete); t->scroll.direction = axis; tp_edge_scroll_handle_event(tp, t, SCROLL_EVENT_POSTED); @@ -398,6 +399,7 @@ tp_edge_scroll_stop_events(struct tp_dispatch *tp, uint64_t time) struct libinput_device *device = &tp->device->base; struct tp_touch *t; const struct normalized_coords zero = { 0.0, 0.0 }; + const struct discrete_coords zero_discrete = { 0.0, 0.0 }; tp_for_each_touch(tp, t) { if (t->scroll.direction != -1) { @@ -405,7 +407,7 @@ tp_edge_scroll_stop_events(struct tp_dispatch *tp, uint64_t time) AS_MASK(t->scroll.direction), LIBINPUT_POINTER_AXIS_SOURCE_FINGER, &zero, - 0.0, 0.0); + &zero_discrete); t->scroll.direction = -1; } } diff --git a/src/evdev.c b/src/evdev.c index cab7e85..c661af9 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -586,15 +586,16 @@ evdev_notify_axis(struct evdev_device *device, uint32_t axes, enum libinput_pointer_axis_source source, const struct normalized_coords *delta_in, - double x_discrete, double y_discrete) + const struct discrete_coords *discrete_in) { struct normalized_coords delta = *delta_in; + struct discrete_coords discrete = *discrete_in; if (device->scroll.natural_scrolling_enabled) { delta.x *= -1; delta.y *= -1; - x_discrete *= -1; - y_discrete *= -1; + discrete.x *= -1; + discrete.y *= -1; } pointer_notify_axis(&device->base, @@ -602,7 +603,7 @@ evdev_notify_axis(struct evdev_device *device, axes, source, &delta, - x_discrete, y_discrete); + &discrete); } static inline void @@ -610,6 +611,7 @@ evdev_process_relative(struct evdev_device *device, struct input_event *e, uint64_t time) { struct normalized_coords wheel_degrees = { 0.0, 0.0 }; + struct discrete_coords discrete = { 0.0, 0.0 }; switch (e->code) { case REL_X: @@ -628,26 +630,26 @@ evdev_process_relative(struct evdev_device *device, evdev_flush_pending_event(device, time); wheel_degrees.y = -1 * e->value * device->scroll.wheel_click_angle; + discrete.y = -1 * e->value; evdev_notify_axis( device, time, AS_MASK(LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL), LIBINPUT_POINTER_AXIS_SOURCE_WHEEL, &wheel_degrees, - 0.0, - -1 * e->value); + &discrete); break; case REL_HWHEEL: evdev_flush_pending_event(device, time); wheel_degrees.x = e->value * device->scroll.wheel_click_angle; + discrete.x = e->value; evdev_notify_axis( device, time, AS_MASK(LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL), LIBINPUT_POINTER_AXIS_SOURCE_WHEEL, &wheel_degrees, - e->value, - 0.0); + &discrete); break; } } @@ -1977,13 +1979,15 @@ evdev_post_scroll(struct evdev_device *device, LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL)) event.x = 0.0; - if (event.x != 0.0 || event.y != 0.0) + if (event.x != 0.0 || event.y != 0.0) { + const struct discrete_coords zero_discrete = { 0.0, 0.0 }; evdev_notify_axis(device, time, device->scroll.direction, source, &event, - 0.0, 0.0); + &zero_discrete); + } } void @@ -1992,6 +1996,7 @@ evdev_stop_scroll(struct evdev_device *device, enum libinput_pointer_axis_source source) { const struct normalized_coords zero = { 0.0, 0.0 }; + const struct discrete_coords zero_discrete = { 0.0, 0.0 }; /* terminate scrolling with a zero scroll event */ if (device->scroll.direction != 0) @@ -2000,7 +2005,7 @@ evdev_stop_scroll(struct evdev_device *device, device->scroll.direction, source, &zero, - 0.0, 0.0); + &zero_discrete); device->scroll.buildup.x = 0; device->scroll.buildup.y = 0; diff --git a/src/libinput-private.h b/src/libinput-private.h index 91bfc37..e39ac5e 100644 --- a/src/libinput-private.h +++ b/src/libinput-private.h @@ -42,6 +42,11 @@ struct normalized_coords { double x, y; }; +/* A discrete step pair (mouse wheels) */ +struct discrete_coords { + int x, y; +}; + struct libinput_interface_backend { int (*resume)(struct libinput *libinput); void (*suspend)(struct libinput *libinput); @@ -310,8 +315,7 @@ pointer_notify_axis(struct libinput_device *device, uint32_t axes, enum libinput_pointer_axis_source source, const struct normalized_coords *delta, - double x_discrete, - double y_discrete); + const struct discrete_coords *discrete); void touch_notify_touch_down(struct libinput_device *device, diff --git a/src/libinput.c b/src/libinput.c index 1a68069..8db6997 100644 --- a/src/libinput.c +++ b/src/libinput.c @@ -59,8 +59,7 @@ struct libinput_event_pointer { uint32_t time; struct normalized_coords delta; struct device_coords absolute; - double x_discrete; - double y_discrete; + struct discrete_coords discrete; double dx_unaccel; double dy_unaccel; uint32_t button; @@ -428,10 +427,10 @@ libinput_event_pointer_get_axis_value_discrete(struct libinput_event_pointer *ev } else { switch (axis) { case LIBINPUT_POINTER_AXIS_SCROLL_HORIZONTAL: - value = event->x_discrete; + value = event->discrete.x; break; case LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL: - value = event->y_discrete; + value = event->discrete.y; break; } } @@ -1037,7 +1036,7 @@ pointer_notify_axis(struct libinput_device *device, uint32_t axes, enum libinput_pointer_axis_source source, const struct normalized_coords *delta, - double x_discrete, double y_discrete) + const struct discrete_coords *discrete) { struct libinput_event_pointer *axis_event; @@ -1050,8 +1049,7 @@ pointer_notify_axis(struct libinput_device *device, .delta = *delta, .source = source, .axes = axes, - .x_discrete = x_discrete, - .y_discrete = y_discrete, + .discrete = *discrete, }; post_device_event(device, time, -- 2.1.0 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel