diff options
author | Ryan Dwyer <RyanDwyer@users.noreply.github.com> | 2018-08-02 23:05:49 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-02 23:05:49 +1000 |
commit | 706c0fbe2376e15f8140be60f3c8b0713128ebba (patch) | |
tree | ffefcdd261970549f8b83adae8d93b6c3b9ebbbb /sway/desktop/transaction.c | |
parent | swaynag: don't drop \n for first line (diff) | |
parent | Merge pull request #2404 from RyanDwyer/move-containers-when-workspace-focused (diff) | |
download | sway-706c0fbe2376e15f8140be60f3c8b0713128ebba.tar.gz sway-706c0fbe2376e15f8140be60f3c8b0713128ebba.tar.zst sway-706c0fbe2376e15f8140be60f3c8b0713128ebba.zip |
Merge branch 'master' into nagbar
Diffstat (limited to 'sway/desktop/transaction.c')
-rw-r--r-- | sway/desktop/transaction.c | 58 |
1 files changed, 19 insertions, 39 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 7975366e..4e6af86a 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c | |||
@@ -41,8 +41,6 @@ struct sway_transaction_instruction { | |||
41 | struct sway_transaction *transaction; | 41 | struct sway_transaction *transaction; |
42 | struct sway_container *container; | 42 | struct sway_container *container; |
43 | struct sway_container_state state; | 43 | struct sway_container_state state; |
44 | struct wlr_buffer *saved_buffer; | ||
45 | int saved_buffer_width, saved_buffer_height; | ||
46 | uint32_t serial; | 44 | uint32_t serial; |
47 | bool ready; | 45 | bool ready; |
48 | }; | 46 | }; |
@@ -57,27 +55,6 @@ static struct sway_transaction *transaction_create() { | |||
57 | return transaction; | 55 | return transaction; |
58 | } | 56 | } |
59 | 57 | ||
60 | static void remove_saved_view_buffer( | ||
61 | struct sway_transaction_instruction *instruction) { | ||
62 | if (instruction->saved_buffer) { | ||
63 | wlr_buffer_unref(instruction->saved_buffer); | ||
64 | instruction->saved_buffer = NULL; | ||
65 | } | ||
66 | } | ||
67 | |||
68 | static void save_view_buffer(struct sway_view *view, | ||
69 | struct sway_transaction_instruction *instruction) { | ||
70 | if (!sway_assert(instruction->saved_buffer == NULL, | ||
71 | "Didn't expect instruction to have a saved buffer already")) { | ||
72 | remove_saved_view_buffer(instruction); | ||
73 | } | ||
74 | if (view->surface && wlr_surface_has_buffer(view->surface)) { | ||
75 | instruction->saved_buffer = wlr_buffer_ref(view->surface->buffer); | ||
76 | instruction->saved_buffer_width = view->surface->current.width; | ||
77 | instruction->saved_buffer_height = view->surface->current.height; | ||
78 | } | ||
79 | } | ||
80 | |||
81 | static void transaction_destroy(struct sway_transaction *transaction) { | 58 | static void transaction_destroy(struct sway_transaction *transaction) { |
82 | // Free instructions | 59 | // Free instructions |
83 | for (int i = 0; i < transaction->instructions->length; ++i) { | 60 | for (int i = 0; i < transaction->instructions->length; ++i) { |
@@ -93,7 +70,6 @@ static void transaction_destroy(struct sway_transaction *transaction) { | |||
93 | if (con->destroying && !con->instructions->length) { | 70 | if (con->destroying && !con->instructions->length) { |
94 | container_free(con); | 71 | container_free(con); |
95 | } | 72 | } |
96 | remove_saved_view_buffer(instruction); | ||
97 | free(instruction); | 73 | free(instruction); |
98 | } | 74 | } |
99 | list_free(transaction->instructions); | 75 | list_free(transaction->instructions); |
@@ -158,9 +134,6 @@ static void transaction_add_container(struct sway_transaction *transaction, | |||
158 | 134 | ||
159 | copy_pending_state(container, &instruction->state); | 135 | copy_pending_state(container, &instruction->state); |
160 | 136 | ||
161 | if (container->type == C_VIEW) { | ||
162 | save_view_buffer(container->sway_view, instruction); | ||
163 | } | ||
164 | list_add(transaction->instructions, instruction); | 137 | list_add(transaction->instructions, instruction); |
165 | } | 138 | } |
166 | 139 | ||
@@ -220,6 +193,22 @@ static void transaction_apply(struct sway_transaction *transaction) { | |||
220 | 193 | ||
221 | memcpy(&container->current, &instruction->state, | 194 | memcpy(&container->current, &instruction->state, |
222 | sizeof(struct sway_container_state)); | 195 | sizeof(struct sway_container_state)); |
196 | |||
197 | if (container->type == C_VIEW) { | ||
198 | if (container->destroying) { | ||
199 | if (container->instructions->length == 1 && | ||
200 | container->sway_view->saved_buffer) { | ||
201 | view_remove_saved_buffer(container->sway_view); | ||
202 | } | ||
203 | } else { | ||
204 | if (container->sway_view->saved_buffer) { | ||
205 | view_remove_saved_buffer(container->sway_view); | ||
206 | } | ||
207 | if (container->instructions->length > 1) { | ||
208 | view_save_buffer(container->sway_view); | ||
209 | } | ||
210 | } | ||
211 | } | ||
223 | } | 212 | } |
224 | } | 213 | } |
225 | 214 | ||
@@ -295,6 +284,9 @@ static void transaction_commit(struct sway_transaction *transaction) { | |||
295 | struct timespec when; | 284 | struct timespec when; |
296 | wlr_surface_send_frame_done(con->sway_view->surface, &when); | 285 | wlr_surface_send_frame_done(con->sway_view->surface, &when); |
297 | } | 286 | } |
287 | if (con->type == C_VIEW && !con->sway_view->saved_buffer) { | ||
288 | view_save_buffer(con->sway_view); | ||
289 | } | ||
298 | list_add(con->instructions, instruction); | 290 | list_add(con->instructions, instruction); |
299 | } | 291 | } |
300 | transaction->num_configures = transaction->num_waiting; | 292 | transaction->num_configures = transaction->num_waiting; |
@@ -400,18 +392,6 @@ void transaction_notify_view_ready_by_size(struct sway_view *view, | |||
400 | } | 392 | } |
401 | } | 393 | } |
402 | 394 | ||
403 | struct wlr_texture *transaction_get_saved_texture(struct sway_view *view, | ||
404 | int *width, int *height) { | ||
405 | struct sway_transaction_instruction *instruction = | ||
406 | view->swayc->instructions->items[0]; | ||
407 | if (!instruction->saved_buffer) { | ||
408 | return NULL; | ||
409 | } | ||
410 | *width = instruction->saved_buffer_width; | ||
411 | *height = instruction->saved_buffer_height; | ||
412 | return instruction->saved_buffer->texture; | ||
413 | } | ||
414 | |||
415 | void transaction_commit_dirty(void) { | 395 | void transaction_commit_dirty(void) { |
416 | if (!server.dirty_containers->length) { | 396 | if (!server.dirty_containers->length) { |
417 | return; | 397 | return; |