|
|
@ -54,7 +54,7 @@ struct wlr_layer_surface_v1 *toplevel_layer_surface_from_surface(
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void arrange_surface(struct sway_output *output, const struct wlr_box *full_area,
|
|
|
|
static void arrange_surface(struct sway_output *output, const struct wlr_box *full_area,
|
|
|
|
struct wlr_box *usable_area, struct wlr_scene_tree *tree) {
|
|
|
|
struct wlr_box *usable_area, struct wlr_scene_tree *tree, bool exclusive) {
|
|
|
|
struct wlr_scene_node *node;
|
|
|
|
struct wlr_scene_node *node;
|
|
|
|
wl_list_for_each(node, &tree->children, link) {
|
|
|
|
wl_list_for_each(node, &tree->children, link) {
|
|
|
|
struct sway_layer_surface *surface = scene_descriptor_try_get(node,
|
|
|
|
struct sway_layer_surface *surface = scene_descriptor_try_get(node,
|
|
|
@ -68,6 +68,10 @@ static void arrange_surface(struct sway_output *output, const struct wlr_box *fu
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((surface->scene->layer_surface->current.exclusive_zone > 0) != exclusive) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wlr_scene_layer_surface_v1_configure(surface->scene, full_area, usable_area);
|
|
|
|
wlr_scene_layer_surface_v1_configure(surface->scene, full_area, usable_area);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -78,10 +82,14 @@ void arrange_layers(struct sway_output *output) {
|
|
|
|
&usable_area.width, &usable_area.height);
|
|
|
|
&usable_area.width, &usable_area.height);
|
|
|
|
const struct wlr_box full_area = usable_area;
|
|
|
|
const struct wlr_box full_area = usable_area;
|
|
|
|
|
|
|
|
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_background);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_background, true);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_bottom);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_background, false);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_top);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_bottom, true);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_overlay);
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_bottom, false);
|
|
|
|
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_top, true);
|
|
|
|
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_top, false);
|
|
|
|
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_overlay, true);
|
|
|
|
|
|
|
|
arrange_surface(output, &full_area, &usable_area, output->layers.shell_overlay, false);
|
|
|
|
|
|
|
|
|
|
|
|
if (!wlr_box_equal(&usable_area, &output->usable_area)) {
|
|
|
|
if (!wlr_box_equal(&usable_area, &output->usable_area)) {
|
|
|
|
sway_log(SWAY_DEBUG, "Usable area changed, rearranging output");
|
|
|
|
sway_log(SWAY_DEBUG, "Usable area changed, rearranging output");
|
|
|
|