From 73a9412a3bfbd27348a5c9215c2e7f2660c5747d Mon Sep 17 00:00:00 2001 From: Furkan Sahin Date: Sat, 28 Jun 2025 10:51:51 +0200 Subject: Revert "sway/tree: Simplify sway_node teardown" This reverts commit d2ef57e60c89c7cb3c652a932de37fd560b9addd. This change tried to remove nodes from all points of reference to allow immediate destruction. However, it missed things like the children lists cloned by transaction states of parent nodes. Adding all that extra cleanup would not be in the spirit of a PR claiming to simplify teardown. Let's wait for someone to come up with a cleaner approach instead. Fixes: https://github.com/swaywm/sway/pull/8738 --- include/sway/desktop/transaction.h | 6 ------ include/sway/output.h | 2 ++ include/sway/tree/container.h | 2 ++ include/sway/tree/node.h | 1 + include/sway/tree/view.h | 4 ++++ include/sway/tree/workspace.h | 4 +++- 6 files changed, 12 insertions(+), 7 deletions(-) (limited to 'include') diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h index 80af4aae..dd7edb7a 100644 --- a/include/sway/desktop/transaction.h +++ b/include/sway/desktop/transaction.h @@ -23,7 +23,6 @@ struct sway_transaction_instruction; struct sway_view; -struct sway_node; /** * Find all dirty containers, create and commit a transaction containing them, @@ -31,11 +30,6 @@ struct sway_node; */ void transaction_commit_dirty(void); -/** - * Remove a node that will be destroyed from transactions and dirty node lists. - */ -void transaction_remove_node(struct sway_node *node); - /* * Same as transaction_commit_dirty, but signalling that this is a * client-initiated change has already taken effect. diff --git a/include/sway/output.h b/include/sway/output.h index 43c3dc9a..f6354e0e 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -84,6 +84,8 @@ struct sway_output *output_create(struct wlr_output *wlr_output); void output_destroy(struct sway_output *output); +void output_begin_destroy(struct sway_output *output); + struct sway_output *output_from_wlr_output(struct wlr_output *output); struct sway_output *output_get_in_direction(struct sway_output *reference, diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index 4b284104..e18fd00a 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h @@ -155,6 +155,8 @@ struct sway_container *container_create(struct sway_view *view); void container_destroy(struct sway_container *con); +void container_begin_destroy(struct sway_container *con); + /** * Search a container's descendants a container based on test criteria. Returns * the first container that passes the test. diff --git a/include/sway/tree/node.h b/include/sway/tree/node.h index 7b6e936c..e2dbcdf0 100644 --- a/include/sway/tree/node.h +++ b/include/sway/tree/node.h @@ -39,6 +39,7 @@ struct sway_node { struct sway_transaction_instruction *instruction; size_t ntxnrefs; + bool destroying; // If true, indicates that the container has pending state that differs from // the current. diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index d999b502..6151a023 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h @@ -101,6 +101,8 @@ struct sway_view { struct wl_listener foreign_close_request; struct wl_listener foreign_destroy; + bool destroying; + list_t *executed_criteria; // struct criteria * union { @@ -294,6 +296,8 @@ bool view_init(struct sway_view *view, enum sway_view_type type, void view_destroy(struct sway_view *view); +void view_begin_destroy(struct sway_view *view); + /** * Map a view, ie. make it visible in the tree. * diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h index 77991b27..27ed649f 100644 --- a/include/sway/tree/workspace.h +++ b/include/sway/tree/workspace.h @@ -62,7 +62,9 @@ struct sway_workspace *workspace_create(struct sway_output *output, void workspace_destroy(struct sway_workspace *workspace); -bool workspace_consider_destroy(struct sway_workspace *ws); +void workspace_begin_destroy(struct sway_workspace *workspace); + +void workspace_consider_destroy(struct sway_workspace *ws); char *workspace_next_name(const char *output_name); -- cgit v1.2.3