aboutsummaryrefslogtreecommitdiff
path: root/xwayland/shell.c
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2022-10-18 13:02:47 +0200
committerSimon Zeni <simon@bl4ckb0ne.ca>2022-11-18 15:35:20 +0000
commitd3b84463f8d6d483f446b3cdd18fcff031bc830c (patch)
treef58202caceb35f546a92d1bdaf119e4f0808e909 /xwayland/shell.c
parent44c7e233ff7581c9735b03c2105d9803f9a8535f (diff)
xwayland: add wlr_xwayland_shell_v1_destroy()
Diffstat (limited to 'xwayland/shell.c')
-rw-r--r--xwayland/shell.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/xwayland/shell.c b/xwayland/shell.c
index 75049f64..a6ec315b 100644
--- a/xwayland/shell.c
+++ b/xwayland/shell.c
@@ -161,10 +161,7 @@ static void shell_bind(struct wl_client *client, void *data, uint32_t version,
static void handle_display_destroy(struct wl_listener *listener, void *data) {
struct wlr_xwayland_shell_v1 *shell =
wl_container_of(listener, shell, display_destroy);
- wl_list_remove(&shell->display_destroy.link);
- wl_list_remove(&shell->client_destroy.link);
- wl_global_destroy(shell->global);
- free(shell);
+ wlr_xwayland_shell_v1_destroy(shell);
}
struct wlr_xwayland_shell_v1 *wlr_xwayland_shell_v1_create(
@@ -183,6 +180,7 @@ struct wlr_xwayland_shell_v1 *wlr_xwayland_shell_v1_create(
return NULL;
}
+ wl_list_init(&shell->surfaces);
wl_signal_init(&shell->events.new_surface);
shell->display_destroy.notify = handle_display_destroy;
@@ -193,6 +191,22 @@ struct wlr_xwayland_shell_v1 *wlr_xwayland_shell_v1_create(
return shell;
}
+void wlr_xwayland_shell_v1_destroy(struct wlr_xwayland_shell_v1 *shell) {
+ if (shell == NULL) {
+ return;
+ }
+
+ struct wlr_xwayland_surface_v1 *xwl_surface, *tmp;
+ wl_list_for_each_safe(xwl_surface, tmp, &shell->surfaces, link) {
+ wlr_surface_destroy_role_object(xwl_surface->surface);
+ }
+
+ wl_list_remove(&shell->display_destroy.link);
+ wl_list_remove(&shell->client_destroy.link);
+ wl_global_destroy(shell->global);
+ free(shell);
+}
+
static void shell_handle_client_destroy(struct wl_listener *listener, void *data) {
struct wlr_xwayland_shell_v1 *shell =
wl_container_of(listener, shell, client_destroy);