From 33fc1c6d0543f577dafbf4587fecdbc9e21bbced Mon Sep 17 00:00:00 2001 From: Jens Peters Date: Fri, 6 Jun 2025 07:14:38 +0200 Subject: [PATCH] input: emulate cursor axis for tablet tool mouse We only have to deal with non-high-res mouses, so we can emulate it even without having delta_discrete being exposed by wlroots. --- src/input/tablet.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/input/tablet.c b/src/input/tablet.c index 314e5e46..bc09a1ac 100644 --- a/src/input/tablet.c +++ b/src/input/tablet.c @@ -439,6 +439,21 @@ handle_tablet_tool_axis(struct wl_listener *listener, void *data) break; } } + if (ev->updated_axes & WLR_TABLET_TOOL_AXIS_WHEEL) { + /* + * libinput reports delta_discrete for tablet tool mouses, + * but unfortunately wlroots doesn't expose it. That said, + * based on the libinput source (tablet_device_has_axis()), + * we only have to deal with non-high-res mouses here, so + * it is relatively safe to set a fixed value. + */ + int delta_discrete = tablet->wheel_delta >= 0 ? 1 : -1; + cursor_emulate_axis(tablet->seat, &ev->tablet->base, + WL_POINTER_AXIS_VERTICAL_SCROLL, + tablet->wheel_delta, + WLR_POINTER_AXIS_DISCRETE_STEP * delta_discrete, + WL_POINTER_AXIS_SOURCE_WHEEL, ev->time_msec); + } } }