diff --git a/types/wlr_output.c b/types/wlr_output.c index 06593514..09117441 100644 --- a/types/wlr_output.c +++ b/types/wlr_output.c @@ -198,6 +198,10 @@ static void handle_cursor_surface_destroy(struct wl_listener *listener, void wlr_output_set_cursor_surface(struct wlr_output *output, struct wlr_surface *surface, int32_t hotspot_x, int32_t hotspot_y) { + if (strcmp(surface->role, "cursor") != 0) { + return; + } + output->cursor.hotspot_x = hotspot_x; output->cursor.hotspot_y = hotspot_y; diff --git a/types/wlr_seat.c b/types/wlr_seat.c index a543936d..d58b2129 100644 --- a/types/wlr_seat.c +++ b/types/wlr_seat.c @@ -27,6 +27,11 @@ static void wl_pointer_set_cursor(struct wl_client *client, struct wlr_surface *surface = NULL; if (surface_resource != NULL) { surface = wl_resource_get_user_data(surface_resource); + + if (wlr_surface_set_role(surface, "cursor", resource, + WL_POINTER_ERROR_ROLE) < 0) { + return; + } } struct wlr_seat_pointer_request_set_cursor_event *event =