diff options
author | Simon Ser <contact@emersion.fr> | 2023-05-05 16:34:35 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2023-07-24 11:28:31 +0200 |
commit | 6bd11ad0dfb11f8cf7e0ab5330cd2488851c5614 (patch) | |
tree | e19fefe24bfd0df60064702f7251e4d5175e2352 /sway/input/cursor.c | |
parent | fix crash when resizing tiled scratchpad windows (diff) | |
download | sway-6bd11ad0dfb11f8cf7e0ab5330cd2488851c5614.tar.gz sway-6bd11ad0dfb11f8cf7e0ab5330cd2488851c5614.tar.zst sway-6bd11ad0dfb11f8cf7e0ab5330cd2488851c5614.zip |
Add support for cursor-shape-v1
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4106
Diffstat (limited to 'sway/input/cursor.c')
-rw-r--r-- | sway/input/cursor.c | 24 |
1 files changed, 24 insertions, 0 deletions
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 @@ | |||
7 | #include <time.h> | 7 | #include <time.h> |
8 | #include <strings.h> | 8 | #include <strings.h> |
9 | #include <wlr/types/wlr_cursor.h> | 9 | #include <wlr/types/wlr_cursor.h> |
10 | #include <wlr/types/wlr_cursor_shape_v1.h> | ||
10 | #include <wlr/types/wlr_idle.h> | 11 | #include <wlr/types/wlr_idle.h> |
11 | #include <wlr/types/wlr_pointer.h> | 12 | #include <wlr/types/wlr_pointer.h> |
12 | #include <wlr/types/wlr_touch.h> | 13 | #include <wlr/types/wlr_touch.h> |
@@ -1467,3 +1468,26 @@ void sway_cursor_constrain(struct sway_cursor *cursor, | |||
1467 | wl_signal_add(&constraint->surface->events.commit, | 1468 | wl_signal_add(&constraint->surface->events.commit, |
1468 | &cursor->constraint_commit); | 1469 | &cursor->constraint_commit); |
1469 | } | 1470 | } |
1471 | |||
1472 | void handle_request_set_cursor_shape(struct wl_listener *listener, void *data) { | ||
1473 | const struct wlr_cursor_shape_manager_v1_request_set_shape_event *event = data; | ||
1474 | struct sway_seat *seat = event->seat_client->seat->data; | ||
1475 | |||
1476 | if (!seatop_allows_set_cursor(seat)) { | ||
1477 | return; | ||
1478 | } | ||
1479 | |||
1480 | struct wl_client *focused_client = NULL; | ||
1481 | struct wlr_surface *focused_surface = seat->wlr_seat->pointer_state.focused_surface; | ||
1482 | if (focused_surface != NULL) { | ||
1483 | focused_client = wl_resource_get_client(focused_surface->resource); | ||
1484 | } | ||
1485 | |||
1486 | // TODO: check cursor mode | ||
1487 | if (focused_client == NULL || event->seat_client->client != focused_client) { | ||
1488 | sway_log(SWAY_DEBUG, "denying request to set cursor from unfocused client"); | ||
1489 | return; | ||
1490 | } | ||
1491 | |||
1492 | cursor_set_image(seat->cursor, wlr_cursor_shape_v1_name(event->shape), focused_client); | ||
1493 | } | ||