diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 0e5f84f54..c5bb38184 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -1560,6 +1560,13 @@ static void tablet_tool_wheel(void *data, struct zwp_tablet_tool_v2 *tool, wl_fixed_t degrees, int32_t clicks) { + struct xwl_tablet_tool *xwl_tablet_tool = data; + struct xwl_seat *xwl_seat = xwl_tablet_tool->seat; + + if (!xwl_seat->focus_window) + return; + + xwl_tablet_tool->wheel_clicks = clicks; } static void @@ -1671,6 +1678,23 @@ tablet_tool_frame(void *data, struct zwp_tablet_tool_v2 *tool, uint32_t time) } xwl_tablet_tool->buttons_prev = xwl_tablet_tool->buttons_now; + + while (xwl_tablet_tool->wheel_clicks) { + if (xwl_tablet_tool->wheel_clicks < 0) { + button = 4; + xwl_tablet_tool->wheel_clicks++; + } + else { + button = 5; + xwl_tablet_tool->wheel_clicks--; + } + + QueuePointerEvents(xwl_tablet_tool->xdevice, + ButtonPress, button, 0, &mask); + QueuePointerEvents(xwl_tablet_tool->xdevice, + ButtonRelease, button, 0, &mask); + + } } static const struct zwp_tablet_tool_v2_listener tablet_tool_listener = { diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h index a05e0862c..066877099 100644 --- a/hw/xwayland/xwayland.h +++ b/hw/xwayland/xwayland.h @@ -214,6 +214,8 @@ struct xwl_tablet_tool { uint32_t buttons_now, buttons_prev; + int32_t wheel_clicks; + struct xwl_cursor cursor; };