Use view->scene_tree as toplevel for view + some legwork:

desktop.c move_to_front() calls wlr_scene_node_raise_to_top
desktop.c, ssd/include.h add LAB_SSD_{OSD, MENU, LAYER_SURFACE} enums
desktop.c desktop_surface_and_view_at() -> desktop_node_and_view_at()
cursor.c reenable cursor_rebase()
cursor.c reenable button click on layer surface
This commit is contained in:
Consolatis 2022-02-18 00:07:37 +01:00 committed by Johan Malm
parent 688abf7db1
commit 7ea733761b
7 changed files with 126 additions and 64 deletions

View file

@ -86,7 +86,11 @@ handle_destroy(struct wl_listener *listener, void *data)
interactive_end(view);
wl_list_remove(&view->link);
wl_list_remove(&view->destroy.link);
ssd_destroy(view);
if (view->scene_tree) {
ssd_destroy(view);
wlr_scene_node_destroy(&view->scene_tree->node);
view->scene_tree = NULL;
}
free(view);
}
@ -388,13 +392,17 @@ xdg_surface_new(struct wl_listener *listener, void *data)
view->xdg_surface = xdg_surface;
wl_list_init(&view->ssd.parts);
view->scene_tree = wlr_scene_tree_create(&view->server->view_tree->node);
view->scene_node = wlr_scene_xdg_surface_create(
&view->server->view_tree->node, view->xdg_surface);
&view->scene_tree->node, view->xdg_surface);
if (!view->scene_node) {
wlr_scene_node_destroy(&view->scene_tree->node);
view->scene_tree = NULL;
wl_resource_post_no_memory(view->surface->resource);
/* TODO: should we free(view) here? */
return;
}
view->scene_node->data = view;
view->scene_tree->node.data = view;
/* In support of xdg_toplevel_decoration */
xdg_surface->data = view;