diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/sway/desktop/transaction.h | 33 | ||||
-rw-r--r-- | include/sway/server.h | 5 | ||||
-rw-r--r-- | include/sway/tree/arrange.h | 22 | ||||
-rw-r--r-- | include/sway/tree/container.h | 10 |
4 files changed, 25 insertions, 45 deletions
diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h index 7ab80eb8..cee4afed 100644 --- a/include/sway/desktop/transaction.h +++ b/include/sway/desktop/transaction.h | |||
@@ -6,34 +6,25 @@ | |||
6 | /** | 6 | /** |
7 | * Transactions enable us to perform atomic layout updates. | 7 | * Transactions enable us to perform atomic layout updates. |
8 | * | 8 | * |
9 | * When we want to make adjustments to the layout, we create a transaction. | 9 | * A transaction contains a list of containers and their new state. |
10 | * A transaction contains a list of affected containers and their new state. | ||
11 | * A state might contain a new size, or new border settings, or new parent/child | 10 | * A state might contain a new size, or new border settings, or new parent/child |
12 | * relationships. | 11 | * relationships. |
13 | * | 12 | * |
14 | * Calling transaction_commit() makes sway notify of all the affected clients | 13 | * Committing a transaction makes sway notify of all the affected clients with |
15 | * with their new sizes. We then wait for all the views to respond with their | 14 | * their new sizes. We then wait for all the views to respond with their new |
16 | * new surface sizes. When all are ready, or when a timeout has passed, we apply | 15 | * surface sizes. When all are ready, or when a timeout has passed, we apply the |
17 | * the updates all at the same time. | 16 | * updates all at the same time. |
18 | */ | 17 | * |
19 | 18 | * When we want to make adjustments to the layout, we change the pending state | |
20 | struct sway_transaction; | 19 | * in containers, mark them as dirty and call transaction_commit_dirty(). This |
21 | 20 | * create and commits a transaction from the dirty containers. | |
22 | /** | ||
23 | * Create a new transaction. | ||
24 | */ | ||
25 | struct sway_transaction *transaction_create(void); | ||
26 | |||
27 | /** | ||
28 | * Add a container's pending state to the transaction. | ||
29 | */ | 21 | */ |
30 | void transaction_add_container(struct sway_transaction *transaction, | ||
31 | struct sway_container *container); | ||
32 | 22 | ||
33 | /** | 23 | /** |
34 | * Submit a transaction to the client views for configuration. | 24 | * Find all dirty containers, create and commit a transaction containing them, |
25 | * and unmark them as dirty. | ||
35 | */ | 26 | */ |
36 | void transaction_commit(struct sway_transaction *transaction); | 27 | void transaction_commit_dirty(void); |
37 | 28 | ||
38 | /** | 29 | /** |
39 | * Notify the transaction system that a view is ready for the new layout. | 30 | * Notify the transaction system that a view is ready for the new layout. |
diff --git a/include/sway/server.h b/include/sway/server.h index a3e32898..a017d1c4 100644 --- a/include/sway/server.h +++ b/include/sway/server.h | |||
@@ -47,10 +47,7 @@ struct sway_server { | |||
47 | bool debug_txn_timings; | 47 | bool debug_txn_timings; |
48 | 48 | ||
49 | list_t *transactions; | 49 | list_t *transactions; |
50 | 50 | list_t *dirty_containers; | |
51 | // When a view is being destroyed and is waiting for a transaction to | ||
52 | // complete it will be stored here. | ||
53 | list_t *destroying_containers; | ||
54 | }; | 51 | }; |
55 | 52 | ||
56 | struct sway_server server; | 53 | struct sway_server server; |
diff --git a/include/sway/tree/arrange.h b/include/sway/tree/arrange.h index 58235642..d6abcc81 100644 --- a/include/sway/tree/arrange.h +++ b/include/sway/tree/arrange.h | |||
@@ -11,26 +11,8 @@ void remove_gaps(struct sway_container *c); | |||
11 | void add_gaps(struct sway_container *c); | 11 | void add_gaps(struct sway_container *c); |
12 | 12 | ||
13 | /** | 13 | /** |
14 | * Arrange layout for all the children of the given container, and add them to | 14 | * Arrange layout for all the children of the given container. |
15 | * the given transaction. | ||
16 | * | ||
17 | * Use this function if you need to arrange multiple sections of the tree in one | ||
18 | * transaction. | ||
19 | * | ||
20 | * You must set the desired state of the container before calling | ||
21 | * arrange_windows, then don't change any state-tracked properties in the | ||
22 | * container until you've called transaction_commit. | ||
23 | */ | 15 | */ |
24 | void arrange_windows(struct sway_container *container, | 16 | void arrange_windows(struct sway_container *container); |
25 | struct sway_transaction *transaction); | ||
26 | |||
27 | /** | ||
28 | * Arrange layout for the given container and commit the transaction. | ||
29 | * | ||
30 | * This function is a wrapper around arrange_windows, and handles creating and | ||
31 | * committing the transaction for you. Use this function if you're only doing | ||
32 | * one arrange operation. | ||
33 | */ | ||
34 | void arrange_and_commit(struct sway_container *container); | ||
35 | 17 | ||
36 | #endif | 18 | #endif |
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index a69da9db..11780916 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h | |||
@@ -144,6 +144,10 @@ struct sway_container { | |||
144 | 144 | ||
145 | bool destroying; | 145 | bool destroying; |
146 | 146 | ||
147 | // If true, indicates that the container has pending state that differs from | ||
148 | // the current. | ||
149 | bool dirty; | ||
150 | |||
147 | struct { | 151 | struct { |
148 | struct wl_signal destroy; | 152 | struct wl_signal destroy; |
149 | // Raised after the tree updates, but before arrange_windows | 153 | // Raised after the tree updates, but before arrange_windows |
@@ -303,4 +307,10 @@ void container_get_box(struct sway_container *container, struct wlr_box *box); | |||
303 | void container_floating_move_to(struct sway_container *con, | 307 | void container_floating_move_to(struct sway_container *con, |
304 | double lx, double ly); | 308 | double lx, double ly); |
305 | 309 | ||
310 | /** | ||
311 | * Mark a container as dirty if it isn't already. Dirty containers will be | ||
312 | * included in the next transaction then unmarked as dirty. | ||
313 | */ | ||
314 | void container_set_dirty(struct sway_container *container); | ||
315 | |||
306 | #endif | 316 | #endif |