summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-07-15 05:01:25 -0700
committerLibravatar GitHub <noreply@github.com>2018-07-15 05:01:25 -0700
commit53e3f35ba348d6285478ceb4a93b020e138c95c7 (patch)
tree091c6133f3bd33b64b1853c7984eaa3921b9facf /include
parentMerge pull request #2266 from emersion/remove-orbital-screenshooter (diff)
parentSet signature to void (diff)
downloadsway-53e3f35ba348d6285478ceb4a93b020e138c95c7.tar.gz
sway-53e3f35ba348d6285478ceb4a93b020e138c95c7.tar.zst
sway-53e3f35ba348d6285478ceb4a93b020e138c95c7.zip
Merge pull request #2272 from RyanDwyer/simplify-transactions
Simplify transactions by using a dirty flag on containers
Diffstat (limited to 'include')
-rw-r--r--include/sway/desktop/transaction.h33
-rw-r--r--include/sway/server.h5
-rw-r--r--include/sway/tree/arrange.h22
-rw-r--r--include/sway/tree/container.h10
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
20struct 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 */
25struct sway_transaction *transaction_create(void);
26
27/**
28 * Add a container's pending state to the transaction.
29 */ 21 */
30void 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 */
36void transaction_commit(struct sway_transaction *transaction); 27void 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
56struct sway_server server; 53struct 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);
11void add_gaps(struct sway_container *c); 11void 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 */
24void arrange_windows(struct sway_container *container, 16void 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 */
34void 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);
303void container_floating_move_to(struct sway_container *con, 307void 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 */
314void container_set_dirty(struct sway_container *container);
315
306#endif 316#endif