sway/tree: Simplify sway_node teardown

A sway_node may end up being referenced in either a queued transaction,
pending transaction or as a dirty node. To manage this, the transaction
system has been responsible for destroying containers, workspaces and
outputs at the end of their last referenced transaction.

This significantly complicates the teardown flow of surfaces and
outputs. Instead, remove the node from transactions and dirty lists so
that the callsite can remove and free the node immediately.
This commit is contained in:
Kenny Levinsen 2025-05-26 14:19:17 +02:00 committed by Simon Ser
parent 4f59eeef05
commit e28e6484e8
16 changed files with 125 additions and 149 deletions

View file

@ -23,6 +23,7 @@
struct sway_transaction_instruction;
struct sway_view;
struct sway_node;
/**
* Find all dirty containers, create and commit a transaction containing them,
@ -30,6 +31,11 @@ struct sway_view;
*/
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.