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

@ -234,6 +234,7 @@ struct view {
#endif
};
struct wlr_surface *surface;
struct wlr_scene_tree *scene_tree;
struct wlr_scene_node *scene_node;
bool mapped;
@ -419,11 +420,13 @@ void desktop_focus_topmost_mapped_view(struct server *server);
bool isfocusable(struct view *view);
/**
* desktop_surface_and_view_at - find view and surface at (lx, ly)
* Note: If surface points to layer-surface, view will be set to NULL
* desktop_node_and_view_at - find view and scene_node at (lx, ly)
* Note: If node points to layer-surface, view_area will be set
* to LAB_SSD_LAYER_SURFACE, if view points to another surface
* view_area will be LAB_SSD_CLIENT
*/
struct view *desktop_surface_and_view_at(struct server *server, double lx,
double ly, struct wlr_surface **surface, double *sx, double *sy,
struct view *desktop_node_and_view_at(struct server *server, double lx,
double ly, struct wlr_scene_node **scene_node, double *sx, double *sy,
enum ssd_part_type *view_area);
struct view *desktop_view_at_cursor(struct server *server);

View file

@ -26,6 +26,9 @@ enum ssd_part_type {
LAB_SSD_CLIENT,
LAB_SSD_FRAME,
LAB_SSD_ROOT,
LAB_SSD_MENU,
LAB_SSD_OSD,
LAB_SSD_LAYER_SURFACE,
LAB_SSD_END_MARKER
};