diff --git a/sway/input/seatop_down.c b/sway/input/seatop_down.c index 95ea7cbb..04de894d 100644 --- a/sway/input/seatop_down.c +++ b/sway/input/seatop_down.c @@ -1,4 +1,5 @@ #define _POSIX_C_SOURCE 200809L +#include #include #include "sway/input/cursor.h" #include "sway/input/seat.h" @@ -11,6 +12,20 @@ struct seatop_down_event { double ref_con_lx, ref_con_ly; // container's x/y at start of op }; +static void handle_axis(struct sway_seat *seat, + struct wlr_event_pointer_axis *event) { + struct sway_input_device *input_device = + event->device ? event->device->data : NULL; + struct input_config *ic = + input_device ? input_device_get_config(input_device) : NULL; + float scroll_factor = + (ic == NULL || ic->scroll_factor == FLT_MIN) ? 1.0f : ic->scroll_factor; + + wlr_seat_pointer_notify_axis(seat->wlr_seat, event->time_msec, + event->orientation, scroll_factor * event->delta, + round(scroll_factor * event->delta_discrete), event->source); +} + static void handle_button(struct sway_seat *seat, uint32_t time_msec, struct wlr_input_device *device, uint32_t button, enum wlr_button_state state) { @@ -42,6 +57,7 @@ static void handle_unref(struct sway_seat *seat, struct sway_container *con) { } static const struct sway_seatop_impl seatop_impl = { + .axis = handle_axis, .button = handle_button, .motion = handle_motion, .unref = handle_unref,