mirror of
https://github.com/swaywm/sway.git
synced 2025-10-29 05:40:18 -04:00
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:
parent
4f59eeef05
commit
e28e6484e8
16 changed files with 125 additions and 149 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -84,8 +84,6 @@ 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,
|
||||
|
|
|
|||
|
|
@ -155,8 +155,6 @@ 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.
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ 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.
|
||||
|
|
|
|||
|
|
@ -101,8 +101,6 @@ struct sway_view {
|
|||
struct wl_listener foreign_close_request;
|
||||
struct wl_listener foreign_destroy;
|
||||
|
||||
bool destroying;
|
||||
|
||||
list_t *executed_criteria; // struct criteria *
|
||||
|
||||
union {
|
||||
|
|
@ -296,8 +294,6 @@ 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.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -62,9 +62,7 @@ struct sway_workspace *workspace_create(struct sway_output *output,
|
|||
|
||||
void workspace_destroy(struct sway_workspace *workspace);
|
||||
|
||||
void workspace_begin_destroy(struct sway_workspace *workspace);
|
||||
|
||||
void workspace_consider_destroy(struct sway_workspace *ws);
|
||||
bool workspace_consider_destroy(struct sway_workspace *ws);
|
||||
|
||||
char *workspace_next_name(const char *output_name);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue