From 2b5eb0733ee326102cc2bd6494be429110f7bb28 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 2 Feb 2023 17:33:12 +0100 Subject: [PATCH] backend/wayland: make destroy_wl_seats() handle a single seat Instead of destroying all seats, destroy a single one. We only need to destroy all seats at one call-site (backend_destroy), but we'll need to destroy a single seat elsewhere in the next commit. --- backend/wayland/backend.c | 6 ++++- backend/wayland/seat.c | 51 ++++++++++++++++++--------------------- include/backend/wayland.h | 2 +- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index 720cecc55..f3aa462ad 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -469,7 +469,11 @@ static void backend_destroy(struct wlr_backend *backend) { wlr_drm_format_set_finish(&wl->shm_formats); wlr_drm_format_set_finish(&wl->linux_dmabuf_v1_formats); - destroy_wl_seats(wl); + struct wlr_wl_seat *seat, *tmp_seat; + wl_list_for_each_safe(seat, tmp_seat, &wl->seats, link) { + destroy_wl_seat(seat); + } + if (wl->zxdg_decoration_manager_v1) { zxdg_decoration_manager_v1_destroy(wl->zxdg_decoration_manager_v1); } diff --git a/backend/wayland/seat.c b/backend/wayland/seat.c index b81fe2193..35fc4dc2e 100644 --- a/backend/wayland/seat.c +++ b/backend/wayland/seat.c @@ -246,34 +246,31 @@ bool create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl) { return true; } -void destroy_wl_seats(struct wlr_wl_backend *wl) { - struct wlr_wl_seat *seat, *tmp_seat; - wl_list_for_each_safe(seat, tmp_seat, &wl->seats, link) { - if (seat->wl_touch) { - wl_touch_release(seat->wl_touch); - wlr_touch_finish(&seat->wlr_touch); - } - if (seat->wl_pointer) { - finish_seat_pointer(seat); - } - if (seat->wl_keyboard) { - wl_keyboard_release(seat->wl_keyboard); - - if (seat->backend->started) { - wlr_keyboard_finish(&seat->wlr_keyboard); - } - } - if (seat->zwp_tablet_seat_v2) { - finish_seat_tablet(seat); - } - - free(seat->name); - assert(seat->wl_seat); - wl_seat_destroy(seat->wl_seat); - - wl_list_remove(&seat->link); - free(seat); +void destroy_wl_seat(struct wlr_wl_seat *seat) { + if (seat->wl_touch) { + wl_touch_release(seat->wl_touch); + wlr_touch_finish(&seat->wlr_touch); } + if (seat->wl_pointer) { + finish_seat_pointer(seat); + } + if (seat->wl_keyboard) { + wl_keyboard_release(seat->wl_keyboard); + + if (seat->backend->started) { + wlr_keyboard_finish(&seat->wlr_keyboard); + } + } + if (seat->zwp_tablet_seat_v2) { + finish_seat_tablet(seat); + } + + free(seat->name); + assert(seat->wl_seat); + wl_seat_destroy(seat->wl_seat); + + wl_list_remove(&seat->link); + free(seat); } bool wlr_input_device_is_wl(struct wlr_input_device *dev) { diff --git a/include/backend/wayland.h b/include/backend/wayland.h index c23c0f9a0..6dd457a56 100644 --- a/include/backend/wayland.h +++ b/include/backend/wayland.h @@ -149,7 +149,7 @@ void init_seat_tablet(struct wlr_wl_seat *seat); void finish_seat_tablet(struct wlr_wl_seat *seat); bool create_wl_seat(struct wl_seat *wl_seat, struct wlr_wl_backend *wl); -void destroy_wl_seats(struct wlr_wl_backend *wl); +void destroy_wl_seat(struct wlr_wl_seat *seat); void destroy_wl_buffer(struct wlr_wl_buffer *buffer); extern const struct wlr_pointer_impl wl_pointer_impl;