diff options
author | David96 <[email protected]> | 2019-12-03 16:03:38 +0100 |
---|---|---|
committer | Simon Ser <[email protected]> | 2020-04-10 10:45:47 +0200 |
commit | 8c6227820754f2bb09ebda3676dcf7a43722ff64 (patch) | |
tree | 63e68c2e9f78d44287f7a451e57c93d1872a5551 /sway/desktop/render.c | |
parent | ac0637708f0adcf9bd754783634b9cdf5acf5a55 (diff) |
Render layer shell popups over the top layer
Diffstat (limited to 'sway/desktop/render.c')
-rw-r--r-- | sway/desktop/render.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/sway/desktop/render.c b/sway/desktop/render.c index 477034fc..14753df2 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -156,13 +156,23 @@ static void render_surface_iterator(struct sway_output *output, struct sway_view wlr_output); } -static void render_layer(struct sway_output *output, +static void render_layer_toplevel(struct sway_output *output, pixman_region32_t *damage, struct wl_list *layer_surfaces) { struct render_data data = { .damage = damage, .alpha = 1.0f, }; - output_layer_for_each_surface(output, layer_surfaces, + output_layer_for_each_surface_toplevel(output, layer_surfaces, + render_surface_iterator, &data); +} + +static void render_layer_popups(struct sway_output *output, + pixman_region32_t *damage, struct wl_list *layer_surfaces) { + struct render_data data = { + .damage = damage, + .alpha = 1.0f, + }; + output_layer_for_each_surface_popup(output, layer_surfaces, render_surface_iterator, &data); } @@ -1041,9 +1051,9 @@ void output_render(struct sway_output *output, struct timespec *when, wlr_renderer_clear(renderer, clear_color); } - render_layer(output, damage, + render_layer_toplevel(output, damage, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]); - render_layer(output, damage, + render_layer_toplevel(output, damage, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); render_workspace(output, damage, workspace, workspace->current.focused); @@ -1051,7 +1061,14 @@ void output_render(struct sway_output *output, struct timespec *when, #if HAVE_XWAYLAND render_unmanaged(output, damage, &root->xwayland_unmanaged); #endif - render_layer(output, damage, + render_layer_toplevel(output, damage, + &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]); + + render_layer_popups(output, damage, + &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]); + render_layer_popups(output, damage, + &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); + render_layer_popups(output, damage, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]); } @@ -1064,7 +1081,9 @@ void output_render(struct sway_output *output, struct timespec *when, } render_overlay: - render_layer(output, damage, + render_layer_toplevel(output, damage, + &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); + render_layer_popups(output, damage, &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); render_drag_icons(output, damage, &root->drag_icons); |