summaryrefslogtreecommitdiffstats
path: root/sway/desktop/output.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r--sway/desktop/output.c35
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
26struct sway_container *output_by_name(const char *name) { 27struct 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
229static void render_container(struct sway_output *output, 230static 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
234static struct sway_container *output_get_active_workspace( 239static 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,