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 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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
21
src/layers.c
21
src/layers.c
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue