aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/transaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/desktop/transaction.c')
-rw-r--r--sway/desktop/transaction.c21
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
167static void transaction_add_node(struct sway_transaction *transaction, 168static 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
525void transaction_commit_dirty(void) { 532static 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
554void transaction_commit_dirty(void) {
555 _transaction_commit_dirty(true);
556}
557
558void transaction_commit_dirty_client(void) {
559 _transaction_commit_dirty(false);
560}