mirror of
https://github.com/labwc/labwc.git
synced 2025-11-04 13:30:07 -05:00
layer: remove wl_list layers[] from struct output
...and just use `struct wlr_scene_tree *layer_tree[]`
This commit is contained in:
parent
e7346f71c0
commit
f01071e72c
4 changed files with 11 additions and 15 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
21
src/layers.c
21
src/layers.c
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue