view: decouple always-on-top windows from the omnipresent state

Before this commit, always-on-{top,bottom} windows were always visible
on all workspaces (omnipresent) because the they were not in
per-workspace trees like normal windows.

This commit fixes this by introducing per-layer trees in
`struct workspace`.

I also added `enum view_layer` and `view->layer` for simplicity.
This commit is contained in:
tokyo4j 2026-02-03 19:18:53 +09:00 committed by Hiroaki Yamamoto
parent 155c153658
commit a2eae22fc2
11 changed files with 85 additions and 96 deletions

View file

@ -1019,7 +1019,8 @@ handle_new_xdg_toplevel(struct wl_listener *listener, void *data)
}
view->workspace = server->workspaces.current;
view->scene_tree = wlr_scene_tree_create(view->workspace->tree);
view->scene_tree = wlr_scene_tree_create(
view->workspace->view_trees[VIEW_LAYER_NORMAL]);
wlr_scene_node_set_enabled(&view->scene_tree->node, false);
struct wlr_scene_tree *tree = wlr_scene_xdg_surface_create(