From 3ce68f80bc09c0b8631cd788f11b27b438ba7e69 Mon Sep 17 00:00:00 2001 From: Frank Praznik Date: Thu, 19 Dec 2024 14:33:06 -0500 Subject: [PATCH] wayland: Clean up the relative pointer if the seat capability is removed Also use wl_pointer_release, when available, instead of destroy. --- src/video/wayland/SDL_waylandevents.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c index a87913d591..6cd7501aad 100644 --- a/src/video/wayland/SDL_waylandevents.c +++ b/src/video/wayland/SDL_waylandevents.c @@ -1980,11 +1980,19 @@ static void seat_handle_capabilities(void *data, struct wl_seat *seat, input->pointer_id = SDL_GetNextObjectID(); SDL_AddMouse(input->pointer_id, WAYLAND_DEFAULT_POINTER_NAME, true); } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) { + if (input->relative_pointer) { + zwp_relative_pointer_v1_destroy(input->relative_pointer); + input->relative_pointer = NULL; + } if (input->cursor_shape) { wp_cursor_shape_device_v1_destroy(input->cursor_shape); input->cursor_shape = NULL; } - wl_pointer_destroy(input->pointer); + if (wl_pointer_get_version(input->pointer) >= WL_POINTER_RELEASE_SINCE_VERSION) { + wl_pointer_release(input->pointer); + } else { + wl_pointer_destroy(input->pointer); + } input->pointer = NULL; input->display->pointer = NULL;