diff options
Diffstat (limited to 'sway/desktop/transaction.c')
-rw-r--r-- | sway/desktop/transaction.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 5dec279d..b2f7f922 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -25,6 +25,8 @@ struct sway_transaction { | |||
25 | size_t num_waiting; | 25 | size_t num_waiting; |
26 | size_t num_configures; | 26 | size_t num_configures; |
27 | struct timespec commit_time; | 27 | struct timespec commit_time; |
28 | void (*callback)(void *data); | ||
29 | void *callback_data; | ||
28 | }; | 30 | }; |
29 | 31 | ||
30 | struct sway_transaction_instruction { | 32 | struct sway_transaction_instruction { |
@@ -295,6 +297,10 @@ static void transaction_apply(struct sway_transaction *transaction) { | |||
295 | 297 | ||
296 | node->instruction = NULL; | 298 | node->instruction = NULL; |
297 | } | 299 | } |
300 | |||
301 | if (transaction->callback) { | ||
302 | transaction->callback(transaction->callback_data); | ||
303 | } | ||
298 | } | 304 | } |
299 | 305 | ||
300 | static void transaction_commit(struct sway_transaction *transaction); | 306 | static void transaction_commit(struct sway_transaction *transaction); |
@@ -499,14 +505,7 @@ void transaction_notify_view_ready_by_size(struct sway_view *view, | |||
499 | } | 505 | } |
500 | } | 506 | } |
501 | 507 | ||
502 | void transaction_commit_dirty(void) { | 508 | static void do_commit_dirty(struct sway_transaction *transaction) { |
503 | if (!server.dirty_nodes->length) { | ||
504 | return; | ||
505 | } | ||
506 | struct sway_transaction *transaction = transaction_create(); | ||
507 | if (!transaction) { | ||
508 | return; | ||
509 | } | ||
510 | for (int i = 0; i < server.dirty_nodes->length; ++i) { | 509 | for (int i = 0; i < server.dirty_nodes->length; ++i) { |
511 | struct sway_node *node = server.dirty_nodes->items[i]; | 510 | struct sway_node *node = server.dirty_nodes->items[i]; |
512 | transaction_add_node(transaction, node); | 511 | transaction_add_node(transaction, node); |
@@ -525,3 +524,28 @@ void transaction_commit_dirty(void) { | |||
525 | transaction_progress_queue(); | 524 | transaction_progress_queue(); |
526 | } | 525 | } |
527 | } | 526 | } |
527 | |||
528 | void transaction_commit_dirty(void) { | ||
529 | if (!server.dirty_nodes->length) { | ||
530 | return; | ||
531 | } | ||
532 | struct sway_transaction *transaction = transaction_create(); | ||
533 | if (!transaction) { | ||
534 | return; | ||
535 | } | ||
536 | do_commit_dirty(transaction); | ||
537 | } | ||
538 | |||
539 | void transaction_commit_dirty_with_callback( | ||
540 | void (*callback)(void *data), void *data) { | ||
541 | if (!server.dirty_nodes->length) { | ||
542 | return; | ||
543 | } | ||
544 | struct sway_transaction *transaction = transaction_create(); | ||
545 | if (!transaction) { | ||
546 | return; | ||
547 | } | ||
548 | transaction->callback = callback; | ||
549 | transaction->callback_data = data; | ||
550 | do_commit_dirty(transaction); | ||
551 | } | ||