diff options
-rw-r--r-- | sway/desktop/transaction.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index ead662f9..bea9d539 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 waiting; | ||
38 | }; | 39 | }; |
39 | 40 | ||
40 | static struct sway_transaction *transaction_create(void) { | 41 | static struct sway_transaction *transaction_create(void) { |
@@ -420,13 +421,18 @@ static void transaction_commit(struct sway_transaction *transaction) { | |||
420 | struct sway_transaction_instruction *instruction = | 421 | struct sway_transaction_instruction *instruction = |
421 | transaction->instructions->items[i]; | 422 | transaction->instructions->items[i]; |
422 | struct sway_node *node = instruction->node; | 423 | struct sway_node *node = instruction->node; |
424 | bool hidden = node_is_view(node) && | ||
425 | !view_is_visible(node->sway_container->view); | ||
423 | if (should_configure(node, instruction)) { | 426 | if (should_configure(node, instruction)) { |
424 | instruction->serial = view_configure(node->sway_container->view, | 427 | instruction->serial = view_configure(node->sway_container->view, |
425 | instruction->container_state.content_x, | 428 | instruction->container_state.content_x, |
426 | instruction->container_state.content_y, | 429 | instruction->container_state.content_y, |
427 | instruction->container_state.content_width, | 430 | instruction->container_state.content_width, |
428 | instruction->container_state.content_height); | 431 | instruction->container_state.content_height); |
429 | ++transaction->num_waiting; | 432 | if (!hidden) { |
433 | instruction->waiting = true; | ||
434 | ++transaction->num_waiting; | ||
435 | } | ||
430 | 436 | ||
431 | // From here on we are rendering a saved buffer of the view, which | 437 | // From here on we are rendering a saved buffer of the view, which |
432 | // means we can send a frame done event to make the client redraw it | 438 | // means we can send a frame done event to make the client redraw it |
@@ -437,7 +443,8 @@ static void transaction_commit(struct sway_transaction *transaction) { | |||
437 | wlr_surface_send_frame_done( | 443 | wlr_surface_send_frame_done( |
438 | node->sway_container->view->surface, &now); | 444 | node->sway_container->view->surface, &now); |
439 | } | 445 | } |
440 | if (node_is_view(node) && wl_list_empty(&node->sway_container->view->saved_buffers)) { | 446 | if (!hidden && node_is_view(node) && |
447 | wl_list_empty(&node->sway_container->view->saved_buffers)) { | ||
441 | view_save_buffer(node->sway_container->view); | 448 | view_save_buffer(node->sway_container->view); |
442 | memcpy(&node->sway_container->view->saved_geometry, | 449 | memcpy(&node->sway_container->view->saved_geometry, |
443 | &node->sway_container->view->geometry, | 450 | &node->sway_container->view->geometry, |
@@ -490,7 +497,8 @@ static void set_instruction_ready( | |||
490 | } | 497 | } |
491 | 498 | ||
492 | // If the transaction has timed out then its num_waiting will be 0 already. | 499 | // If the transaction has timed out then its num_waiting will be 0 already. |
493 | if (transaction->num_waiting > 0 && --transaction->num_waiting == 0) { | 500 | if (instruction->waiting && transaction->num_waiting > 0 && |
501 | --transaction->num_waiting == 0) { | ||
494 | sway_log(SWAY_DEBUG, "Transaction %p is ready", transaction); | 502 | sway_log(SWAY_DEBUG, "Transaction %p is ready", transaction); |
495 | wl_event_source_timer_update(transaction->timer, 0); | 503 | wl_event_source_timer_update(transaction->timer, 0); |
496 | } | 504 | } |