]> git.mdlowis.com Git - proto/labwc.git/commitdiff
layer: remove wl_list layers[] from `struct output`
authorJohan Malm <jgm323@gmail.com>
Wed, 28 Dec 2022 17:01:22 +0000 (17:01 +0000)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Thu, 29 Dec 2022 22:18:08 +0000 (23:18 +0100)
...and just use `struct wlr_scene_tree *layer_tree[]`

include/labwc.h
include/layers.h
src/layers.c
src/output.c

index 0f8217d61fc1fef54ad8bb485fd265b0bd97fd20..f12d225d9e86e558a60876c8666c9e4565d2b153 100644 (file)
@@ -298,7 +298,6 @@ struct output {
        struct server *server;
        struct wlr_output *wlr_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_popup_tree;
        struct wlr_scene_tree *osd_tree;
index b3b1fec9cb2d546ad2fb863cdbf6c9560ace8aa6..a42b7bab4de1e3be5fa910861b59121a8a20c412 100644 (file)
@@ -8,7 +8,6 @@ struct server;
 struct output;
 
 struct lab_layer_surface {
-       struct wl_list link; /* output::layers */
        struct wlr_scene_layer_surface_v1 *scene_layer_surface;
        struct server *server;
 
index 00bec27eac8640f781ed9707a4a38d1e9a2510ab..5ee8e7898a3be44b65659cb4beade6cc98009d41 100644 (file)
@@ -52,7 +52,7 @@ layers_arrange(struct output *output)
                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++) {
                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)
                / 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) {
-               wl_list_for_each_reverse(layer,
-                               &output->layers[layers_above_shell[i]], link) {
-                       struct wlr_layer_surface_v1 *layer_surface =
-                               layer->scene_layer_surface->layer_surface;
-                       if (layer_surface->current.keyboard_interactive) {
-                               topmost = layer;
+               struct wlr_scene_tree *tree = output->layer_tree[layers_above_views[i]];
+               /* Iterate in reverse to give most recent node preference */
+               wl_list_for_each_reverse(node, &tree->children, link) {
+                       struct lab_layer_surface *surface = node_layer_surface_from_node(node);
+                       struct wlr_scene_layer_surface_v1 *scene = surface->scene_layer_surface;
+                       if (scene->layer_surface->current.keyboard_interactive) {
+                               topmost = surface;
                                break;
                        }
                }
@@ -153,7 +155,6 @@ destroy_notify(struct wl_listener *listener, void *data)
        struct lab_layer_surface *layer =
                wl_container_of(listener, layer, node_destroy);
 
-       wl_list_remove(&layer->link);
        wl_list_remove(&layer->map.link);
        wl_list_remove(&layer->unmap.link);
        wl_list_remove(&layer->surface_commit.link);
@@ -367,8 +368,6 @@ new_layer_surface_notify(struct wl_listener *listener, void *data)
                return;
        }
 
-       wl_list_append(&output->layers[layer_surface->pending.layer],
-               &surface->link);
        /*
         * Temporarily set the layer's current state to pending so that
         * it can easily be arranged.
index 7764b3b3ca45fb53181ff7a1cbec5b927d8cf40d..bd154de06ea95e295e3bcca6df7493b46489f0d8 100644 (file)
@@ -145,9 +145,8 @@ new_output_notify(struct wl_listener *listener, void *data)
         * Create layer-trees (background, bottom, top and overlay) and
         * 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++) {
-               wl_list_init(&output->layers[i]);
                output->layer_tree[i] =
                        wlr_scene_tree_create(&server->scene->tree);
                node_descriptor_create(&output->layer_tree[i]->node,