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 @@ #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, |