backend/wayland: handle high-res scroll events

Receive high-resolution scroll events from the parent compositor using
a Wayland listiner and emit the appropiate wlr_pointer signal.
This commit is contained in:
José Expósito 2022-02-25 17:31:01 +01:00
parent e00f042f80
commit 11f49b6b6a
2 changed files with 20 additions and 1 deletions

View file

@ -346,8 +346,15 @@ static void registry_global(void *data, struct wl_registry *registry,
wl->compositor = wl_registry_bind(registry, name, wl->compositor = wl_registry_bind(registry, name,
&wl_compositor_interface, 4); &wl_compositor_interface, 4);
} else if (strcmp(iface, wl_seat_interface.name) == 0) { } else if (strcmp(iface, wl_seat_interface.name) == 0) {
uint32_t target_version = version;
if (version < 5) {
target_version = 5;
}
if (version > 8) {
target_version = 8;
}
struct wl_seat *wl_seat = wl_registry_bind(registry, name, struct wl_seat *wl_seat = wl_registry_bind(registry, name,
&wl_seat_interface, 5); &wl_seat_interface, target_version);
if (!create_wl_seat(wl_seat, wl)) { if (!create_wl_seat(wl_seat, wl)) {
wl_seat_destroy(wl_seat); wl_seat_destroy(wl_seat);
} }

View file

@ -187,6 +187,17 @@ static void pointer_handle_axis_discrete(void *data,
pointer->axis_discrete = discrete * WLR_POINTER_AXIS_DISCRETE_STEP; pointer->axis_discrete = discrete * WLR_POINTER_AXIS_DISCRETE_STEP;
} }
static void pointer_handle_axis_value120(void *data,
struct wl_pointer *wl_pointer, uint32_t axis, int32_t value120) {
struct wlr_wl_seat *seat = data;
struct wlr_wl_pointer *pointer = seat->active_pointer;
if (pointer == NULL) {
return;
}
pointer->axis_discrete = value120;
}
static const struct wl_pointer_listener pointer_listener = { static const struct wl_pointer_listener pointer_listener = {
.enter = pointer_handle_enter, .enter = pointer_handle_enter,
.leave = pointer_handle_leave, .leave = pointer_handle_leave,
@ -197,6 +208,7 @@ static const struct wl_pointer_listener pointer_listener = {
.axis_source = pointer_handle_axis_source, .axis_source = pointer_handle_axis_source,
.axis_stop = pointer_handle_axis_stop, .axis_stop = pointer_handle_axis_stop,
.axis_discrete = pointer_handle_axis_discrete, .axis_discrete = pointer_handle_axis_discrete,
.axis_value120 = pointer_handle_axis_value120,
}; };
static void gesture_swipe_begin(void *data, static void gesture_swipe_begin(void *data,