diff options
-rw-r--r-- | sway/desktop/transaction.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 19f41efc..2a89880a 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -222,24 +222,16 @@ static void transaction_apply(struct sway_transaction *transaction) { | |||
222 | } | 222 | } |
223 | } | 223 | } |
224 | 224 | ||
225 | /** | ||
226 | * For simplicity, we only progress the queue if it can be completely flushed. | ||
227 | */ | ||
228 | static void transaction_progress_queue() { | 225 | static void transaction_progress_queue() { |
229 | // We iterate this list in reverse because we're more likely to find a | 226 | while (server.transactions->length) { |
230 | // waiting transactions at the end of the list. | 227 | struct sway_transaction *transaction = server.transactions->items[0]; |
231 | for (int i = server.transactions->length - 1; i >= 0; --i) { | ||
232 | struct sway_transaction *transaction = server.transactions->items[i]; | ||
233 | if (transaction->num_waiting) { | 228 | if (transaction->num_waiting) { |
234 | return; | 229 | return; |
235 | } | 230 | } |
236 | } | ||
237 | for (int i = 0; i < server.transactions->length; ++i) { | ||
238 | struct sway_transaction *transaction = server.transactions->items[i]; | ||
239 | transaction_apply(transaction); | 231 | transaction_apply(transaction); |
240 | transaction_destroy(transaction); | 232 | transaction_destroy(transaction); |
233 | list_del(server.transactions, 0); | ||
241 | } | 234 | } |
242 | server.transactions->length = 0; | ||
243 | idle_inhibit_v1_check_active(server.idle_inhibit_manager_v1); | 235 | idle_inhibit_v1_check_active(server.idle_inhibit_manager_v1); |
244 | } | 236 | } |
245 | 237 | ||