aboutsummaryrefslogtreecommitdiff
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 @@
#include "sway/tree/container.h"
#include "sway/tree/layout.h"
#include "sway/tree/view.h"
+#include "sway/tree/workspace.h"
struct sway_container *output_by_name(const char *name) {
for (int i = 0; i < root_container.children->length; ++i) {
@@ -228,7 +229,11 @@ static void render_container_iterator(struct sway_container *con,
static void render_container(struct sway_output *output,
struct sway_container *con) {
- container_descendants(con, C_VIEW, render_container_iterator, output);
+ if (con->type == C_VIEW) { // Happens if a view is fullscreened
+ render_container_iterator(con, output);
+ } else {
+ container_descendants(con, C_VIEW, render_container_iterator, output);
+ }
}
static struct sway_container *output_get_active_workspace(
@@ -270,18 +275,24 @@ static void render_output(struct sway_output *output, struct timespec *when,
wlr_output_transformed_resolution(wlr_output, &width, &height);
pixman_region32_union_rect(damage, damage, 0, 0, width, height);
- float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f};
- wlr_renderer_clear(renderer, clear_color);
+ struct sway_container *workspace = output_get_active_workspace(output);
- render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
- render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]);
+ if (workspace->sway_workspace->fullscreen) {
+ float clear_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
+ wlr_renderer_clear(renderer, clear_color);
+ render_container(output, workspace->sway_workspace->fullscreen->swayc);
+ } else {
+ float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f};
+ wlr_renderer_clear(renderer, clear_color);
- struct sway_container *workspace = output_get_active_workspace(output);
- render_container(output, workspace);
+ render_layer(output,
+ &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
+ render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]);
- render_unmanaged(output, &root_container.sway_root->xwayland_unmanaged);
+ render_container(output, workspace);
- // TODO: consider revising this when fullscreen windows are supported
+ render_unmanaged(output, &root_container.sway_root->xwayland_unmanaged);
+ }
render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]);
render_layer(output, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]);
@@ -462,6 +473,12 @@ void output_damage_view(struct sway_output *output, struct sway_view *view,
return;
}
+ struct sway_container *workspace = container_parent(view->swayc,
+ C_WORKSPACE);
+ if (workspace->sway_workspace->fullscreen && !view->is_fullscreen) {
+ return;
+ }
+
struct damage_data data = {
.output = output,
.whole = whole,