diff options
Diffstat (limited to 'sway/desktop/transaction.c')
-rw-r--r-- | sway/desktop/transaction.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 57311fe2..21915207 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -35,6 +35,7 @@ struct sway_transaction_instruction { | |||
35 | struct sway_container_state container_state; | 35 | struct sway_container_state container_state; |
36 | }; | 36 | }; |
37 | uint32_t serial; | 37 | uint32_t serial; |
38 | bool server_request; | ||
38 | bool waiting; | 39 | bool waiting; |
39 | }; | 40 | }; |
40 | 41 | ||
@@ -165,7 +166,7 @@ static void copy_container_state(struct sway_container *container, | |||
165 | } | 166 | } |
166 | 167 | ||
167 | static void transaction_add_node(struct sway_transaction *transaction, | 168 | static void transaction_add_node(struct sway_transaction *transaction, |
168 | struct sway_node *node) { | 169 | struct sway_node *node, bool server_request) { |
169 | struct sway_transaction_instruction *instruction = NULL; | 170 | struct sway_transaction_instruction *instruction = NULL; |
170 | 171 | ||
171 | // Check if we have an instruction for this node already, in which case we | 172 | // Check if we have an instruction for this node already, in which case we |
@@ -188,9 +189,12 @@ static void transaction_add_node(struct sway_transaction *transaction, | |||
188 | } | 189 | } |
189 | instruction->transaction = transaction; | 190 | instruction->transaction = transaction; |
190 | instruction->node = node; | 191 | instruction->node = node; |
192 | instruction->server_request = server_request; | ||
191 | 193 | ||
192 | list_add(transaction->instructions, instruction); | 194 | list_add(transaction->instructions, instruction); |
193 | node->ntxnrefs++; | 195 | node->ntxnrefs++; |
196 | } else if (server_request) { | ||
197 | instruction->server_request = true; | ||
194 | } | 198 | } |
195 | 199 | ||
196 | switch (node->type) { | 200 | switch (node->type) { |
@@ -364,6 +368,9 @@ static bool should_configure(struct sway_node *node, | |||
364 | if (node->destroying) { | 368 | if (node->destroying) { |
365 | return false; | 369 | return false; |
366 | } | 370 | } |
371 | if (!instruction->server_request) { | ||
372 | return false; | ||
373 | } | ||
367 | struct sway_container_state *cstate = &node->sway_container->current; | 374 | struct sway_container_state *cstate = &node->sway_container->current; |
368 | struct sway_container_state *istate = &instruction->container_state; | 375 | struct sway_container_state *istate = &instruction->container_state; |
369 | #if HAVE_XWAYLAND | 376 | #if HAVE_XWAYLAND |
@@ -522,7 +529,7 @@ void transaction_notify_view_ready_immediately(struct sway_view *view) { | |||
522 | } | 529 | } |
523 | } | 530 | } |
524 | 531 | ||
525 | void transaction_commit_dirty(void) { | 532 | static void _transaction_commit_dirty(bool server_request) { |
526 | if (!server.dirty_nodes->length) { | 533 | if (!server.dirty_nodes->length) { |
527 | return; | 534 | return; |
528 | } | 535 | } |
@@ -536,10 +543,18 @@ void transaction_commit_dirty(void) { | |||
536 | 543 | ||
537 | for (int i = 0; i < server.dirty_nodes->length; ++i) { | 544 | for (int i = 0; i < server.dirty_nodes->length; ++i) { |
538 | struct sway_node *node = server.dirty_nodes->items[i]; | 545 | struct sway_node *node = server.dirty_nodes->items[i]; |
539 | transaction_add_node(server.pending_transaction, node); | 546 | transaction_add_node(server.pending_transaction, node, server_request); |
540 | node->dirty = false; | 547 | node->dirty = false; |
541 | } | 548 | } |
542 | server.dirty_nodes->length = 0; | 549 | server.dirty_nodes->length = 0; |
543 | 550 | ||
544 | transaction_commit_pending(); | 551 | transaction_commit_pending(); |
545 | } | 552 | } |
553 | |||
554 | void transaction_commit_dirty(void) { | ||
555 | _transaction_commit_dirty(true); | ||
556 | } | ||
557 | |||
558 | void transaction_commit_dirty_client(void) { | ||
559 | _transaction_commit_dirty(false); | ||
560 | } | ||