diff options
Diffstat (limited to 'sway/desktop/transaction.c')
-rw-r--r-- | sway/desktop/transaction.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 5e42fde5..0ae042db 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -47,7 +47,7 @@ struct sway_transaction_instruction { | |||
47 | bool ready; | 47 | bool ready; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | struct sway_transaction *transaction_create() { | 50 | static struct sway_transaction *transaction_create() { |
51 | struct sway_transaction *transaction = | 51 | struct sway_transaction *transaction = |
52 | calloc(1, sizeof(struct sway_transaction)); | 52 | calloc(1, sizeof(struct sway_transaction)); |
53 | transaction->instructions = create_list(); | 53 | transaction->instructions = create_list(); |
@@ -141,23 +141,8 @@ static void copy_pending_state(struct sway_container *container, | |||
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | static bool transaction_has_container(struct sway_transaction *transaction, | 144 | static void transaction_add_container(struct sway_transaction *transaction, |
145 | struct sway_container *container) { | 145 | struct sway_container *container) { |
146 | for (int i = 0; i < transaction->instructions->length; ++i) { | ||
147 | struct sway_transaction_instruction *instruction = | ||
148 | transaction->instructions->items[i]; | ||
149 | if (instruction->container == container) { | ||
150 | return true; | ||
151 | } | ||
152 | } | ||
153 | return false; | ||
154 | } | ||
155 | |||
156 | void transaction_add_container(struct sway_transaction *transaction, | ||
157 | struct sway_container *container) { | ||
158 | if (transaction_has_container(transaction, container)) { | ||
159 | return; | ||
160 | } | ||
161 | struct sway_transaction_instruction *instruction = | 146 | struct sway_transaction_instruction *instruction = |
162 | calloc(1, sizeof(struct sway_transaction_instruction)); | 147 | calloc(1, sizeof(struct sway_transaction_instruction)); |
163 | instruction->transaction = transaction; | 148 | instruction->transaction = transaction; |
@@ -285,7 +270,7 @@ static bool should_configure(struct sway_container *con, | |||
285 | return true; | 270 | return true; |
286 | } | 271 | } |
287 | 272 | ||
288 | void transaction_commit(struct sway_transaction *transaction) { | 273 | static void transaction_commit(struct sway_transaction *transaction) { |
289 | wlr_log(WLR_DEBUG, "Transaction %p committing with %i instructions", | 274 | wlr_log(WLR_DEBUG, "Transaction %p committing with %i instructions", |
290 | transaction, transaction->instructions->length); | 275 | transaction, transaction->instructions->length); |
291 | transaction->num_waiting = 0; | 276 | transaction->num_waiting = 0; |
@@ -418,3 +403,17 @@ struct wlr_texture *transaction_get_saved_texture(struct sway_view *view, | |||
418 | *height = instruction->saved_buffer_height; | 403 | *height = instruction->saved_buffer_height; |
419 | return instruction->saved_buffer->texture; | 404 | return instruction->saved_buffer->texture; |
420 | } | 405 | } |
406 | |||
407 | void transaction_commit_dirty(void) { | ||
408 | if (!server.dirty_containers->length) { | ||
409 | return; | ||
410 | } | ||
411 | struct sway_transaction *transaction = transaction_create(); | ||
412 | for (int i = 0; i < server.dirty_containers->length; ++i) { | ||
413 | struct sway_container *container = server.dirty_containers->items[i]; | ||
414 | transaction_add_container(transaction, container); | ||
415 | container->dirty = false; | ||
416 | } | ||
417 | server.dirty_containers->length = 0; | ||
418 | transaction_commit(transaction); | ||
419 | } | ||