|
|
|
@ -7,6 +7,7 @@
|
|
|
|
|
#include <time.h>
|
|
|
|
|
#include <strings.h>
|
|
|
|
|
#include <wlr/types/wlr_cursor.h>
|
|
|
|
|
#include <wlr/types/wlr_cursor_shape_v1.h>
|
|
|
|
|
#include <wlr/types/wlr_idle.h>
|
|
|
|
|
#include <wlr/types/wlr_pointer.h>
|
|
|
|
|
#include <wlr/types/wlr_touch.h>
|
|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|