diff options
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r-- | sway/desktop/output.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 1b3143d0..1ab9324d 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include "sway/tree/container.h" | 22 | #include "sway/tree/container.h" |
23 | #include "sway/tree/layout.h" | 23 | #include "sway/tree/layout.h" |
24 | #include "sway/tree/view.h" | 24 | #include "sway/tree/view.h" |
25 | #include "sway/tree/workspace.h" | ||
25 | 26 | ||
26 | struct sway_container *output_by_name(const char *name) { | 27 | struct sway_container *output_by_name(const char *name) { |
27 | for (int i = 0; i < root_container.children->length; ++i) { | 28 | for (int i = 0; i < root_container.children->length; ++i) { |
@@ -228,7 +229,11 @@ static void render_container_iterator(struct sway_container *con, | |||
228 | 229 | ||
229 | static void render_container(struct sway_output *output, | 230 | static void render_container(struct sway_output *output, |
230 | struct sway_container *con) { | 231 | struct sway_container *con) { |
231 | container_descendants(con, C_VIEW, render_container_iterator, output); | 232 | if (con->type == C_VIEW) { // Happens if a view is fullscreened |
233 | render_container_iterator(con, output); | ||
234 | } else { | ||
235 | container_descendants(con, C_VIEW, render_container_iterator, output); | ||
236 | } | ||
232 | } | 237 | } |
233 | 238 | ||
234 | static struct sway_container *output_get_active_workspace( | 239 | static struct sway_container *output_get_active_workspace( |
@@ -270,18 +275,24 @@ static void render_output(struct sway_output *output, struct timespec *when, | |||
270 | wlr_output_transformed_resolution(wlr_output, &width, &height); | 275 | wlr_output_transformed_resolution(wlr_output, &width, &height); |
271 | pixman_region32_union_rect(damage, damage, 0, 0, width, height); | 276 | pixman_region32_union_rect(damage, damage, 0, 0, width, height); |
272 | 277 | ||
273 | float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f}; | 278 | struct sway_container *workspace = output_get_active_workspace(output); |
274 | wlr_renderer_clear(renderer, clear_color); | ||
275 | 279 | ||
276 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]); | 280 | if (workspace->sway_workspace->fullscreen) { |
277 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); | 281 | float clear_color[] = {0.0f, 0.0f, 0.0f, 1.0f}; |
282 | wlr_renderer_clear(renderer, clear_color); | ||
283 | render_container(output, workspace->sway_workspace->fullscreen->swayc); | ||
284 | } else { | ||
285 | float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f}; | ||
286 | wlr_renderer_clear(renderer, clear_color); | ||
278 | 287 | ||
279 | struct sway_container *workspace = output_get_active_workspace(output); | 288 | render_layer(output, |
280 | render_container(output, workspace); | 289 | &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]); |
290 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); | ||
281 | 291 | ||
282 | render_unmanaged(output, &root_container.sway_root->xwayland_unmanaged); | 292 | render_container(output, workspace); |
283 | 293 | ||
284 | // TODO: consider revising this when fullscreen windows are supported | 294 | render_unmanaged(output, &root_container.sway_root->xwayland_unmanaged); |
295 | } | ||
285 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]); | 296 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]); |
286 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); | 297 | render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); |
287 | 298 | ||
@@ -462,6 +473,12 @@ void output_damage_view(struct sway_output *output, struct sway_view *view, | |||
462 | return; | 473 | return; |
463 | } | 474 | } |
464 | 475 | ||
476 | struct sway_container *workspace = container_parent(view->swayc, | ||
477 | C_WORKSPACE); | ||
478 | if (workspace->sway_workspace->fullscreen && !view->is_fullscreen) { | ||
479 | return; | ||
480 | } | ||
481 | |||
465 | struct damage_data data = { | 482 | struct damage_data data = { |
466 | .output = output, | 483 | .output = output, |
467 | .whole = whole, | 484 | .whole = whole, |