From 6bd11ad0dfb11f8cf7e0ab5330cd2488851c5614 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 5 May 2023 16:34:35 +0200 Subject: Add support for cursor-shape-v1 References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4106 --- sway/input/cursor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'sway/input/cursor.c') diff --git a/sway/input/cursor.c b/sway/input/cursor.c index f970e6a2..62c74d04 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -1467,3 +1468,26 @@ void sway_cursor_constrain(struct sway_cursor *cursor, wl_signal_add(&constraint->surface->events.commit, &cursor->constraint_commit); } + +void handle_request_set_cursor_shape(struct wl_listener *listener, void *data) { + const struct wlr_cursor_shape_manager_v1_request_set_shape_event *event = data; + struct sway_seat *seat = event->seat_client->seat->data; + + if (!seatop_allows_set_cursor(seat)) { + return; + } + + struct wl_client *focused_client = NULL; + struct wlr_surface *focused_surface = seat->wlr_seat->pointer_state.focused_surface; + if (focused_surface != NULL) { + focused_client = wl_resource_get_client(focused_surface->resource); + } + + // TODO: check cursor mode + if (focused_client == NULL || event->seat_client->client != focused_client) { + sway_log(SWAY_DEBUG, "denying request to set cursor from unfocused client"); + return; + } + + cursor_set_image(seat->cursor, wlr_cursor_shape_v1_name(event->shape), focused_client); +} -- cgit v1.2.3-54-g00ecf