layer: remove wl_list layers[] from struct output

...and just use `struct wlr_scene_tree *layer_tree[]`
This commit is contained in:
Johan Malm 2022-12-28 17:01:22 +00:00 committed by Consolatis
parent e7346f71c0
commit f01071e72c
4 changed files with 11 additions and 15 deletions

View file

@ -298,7 +298,6 @@ struct output {
struct server *server; struct server *server;
struct wlr_output *wlr_output; struct wlr_output *wlr_output;
struct wlr_scene_output *scene_output; struct wlr_scene_output *scene_output;
struct wl_list layers[LAB_NR_LAYERS];
struct wlr_scene_tree *layer_tree[LAB_NR_LAYERS]; struct wlr_scene_tree *layer_tree[LAB_NR_LAYERS];
struct wlr_scene_tree *layer_popup_tree; struct wlr_scene_tree *layer_popup_tree;
struct wlr_scene_tree *osd_tree; struct wlr_scene_tree *osd_tree;

View file

@ -8,7 +8,6 @@ struct server;
struct output; struct output;
struct lab_layer_surface { struct lab_layer_surface {
struct wl_list link; /* output::layers */
struct wlr_scene_layer_surface_v1 *scene_layer_surface; struct wlr_scene_layer_surface_v1 *scene_layer_surface;
struct server *server; struct server *server;

View file

@ -52,7 +52,7 @@ layers_arrange(struct output *output)
return; return;
} }
int nr_layers = sizeof(output->layers) / sizeof(output->layers[0]); int nr_layers = sizeof(output->layer_tree) / sizeof(output->layer_tree[0]);
for (int i = 0; i < nr_layers; i++) { for (int i = 0; i < nr_layers; i++) {
struct wlr_scene_tree *layer = output->layer_tree[i]; struct wlr_scene_tree *layer = output->layer_tree[i];
@ -78,14 +78,16 @@ layers_arrange(struct output *output)
}; };
size_t nlayers = sizeof(layers_above_shell) size_t nlayers = sizeof(layers_above_shell)
/ sizeof(layers_above_shell[0]); / sizeof(layers_above_shell[0]);
struct lab_layer_surface *layer, *topmost = NULL; struct lab_layer_surface *topmost = NULL;
struct wlr_scene_node *node;
for (size_t i = 0; i < nlayers; ++i) { for (size_t i = 0; i < nlayers; ++i) {
wl_list_for_each_reverse(layer, struct wlr_scene_tree *tree = output->layer_tree[layers_above_views[i]];
&output->layers[layers_above_shell[i]], link) { /* Iterate in reverse to give most recent node preference */
struct wlr_layer_surface_v1 *layer_surface = wl_list_for_each_reverse(node, &tree->children, link) {
layer->scene_layer_surface->layer_surface; struct lab_layer_surface *surface = node_layer_surface_from_node(node);
if (layer_surface->current.keyboard_interactive) { struct wlr_scene_layer_surface_v1 *scene = surface->scene_layer_surface;
topmost = layer; if (scene->layer_surface->current.keyboard_interactive) {
topmost = surface;
break; break;
} }
} }
@ -153,7 +155,6 @@ destroy_notify(struct wl_listener *listener, void *data)
struct lab_layer_surface *layer = struct lab_layer_surface *layer =
wl_container_of(listener, layer, node_destroy); wl_container_of(listener, layer, node_destroy);
wl_list_remove(&layer->link);
wl_list_remove(&layer->map.link); wl_list_remove(&layer->map.link);
wl_list_remove(&layer->unmap.link); wl_list_remove(&layer->unmap.link);
wl_list_remove(&layer->surface_commit.link); wl_list_remove(&layer->surface_commit.link);
@ -367,8 +368,6 @@ new_layer_surface_notify(struct wl_listener *listener, void *data)
return; return;
} }
wl_list_append(&output->layers[layer_surface->pending.layer],
&surface->link);
/* /*
* Temporarily set the layer's current state to pending so that * Temporarily set the layer's current state to pending so that
* it can easily be arranged. * it can easily be arranged.

View file

@ -145,9 +145,8 @@ new_output_notify(struct wl_listener *listener, void *data)
* Create layer-trees (background, bottom, top and overlay) and * Create layer-trees (background, bottom, top and overlay) and
* a layer-popup-tree. * a layer-popup-tree.
*/ */
int nr_layers = sizeof(output->layers) / sizeof(output->layers[0]); int nr_layers = sizeof(output->layer_tree) / sizeof(output->layer_tree[0]);
for (int i = 0; i < nr_layers; i++) { for (int i = 0; i < nr_layers; i++) {
wl_list_init(&output->layers[i]);
output->layer_tree[i] = output->layer_tree[i] =
wlr_scene_tree_create(&server->scene->tree); wlr_scene_tree_create(&server->scene->tree);
node_descriptor_create(&output->layer_tree[i]->node, node_descriptor_create(&output->layer_tree[i]->node,