summaryrefslogtreecommitdiff
path: root/src/helpers/SubsurfaceTree.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-07 20:15:24 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-07 20:15:24 +0200
commit707de8ec3fa364f1f242b36334af17b1a4e851dd (patch)
tree6fe5839920a80290edede951f6c1ed7595b6939e /src/helpers/SubsurfaceTree.cpp
parent26aafb0a11776b0be502ccbb735d77388259adf2 (diff)
Subsurface tree account for subsubsurfaces
Diffstat (limited to 'src/helpers/SubsurfaceTree.cpp')
-rw-r--r--src/helpers/SubsurfaceTree.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/helpers/SubsurfaceTree.cpp b/src/helpers/SubsurfaceTree.cpp
index 19c99eae..fa153fd0 100644
--- a/src/helpers/SubsurfaceTree.cpp
+++ b/src/helpers/SubsurfaceTree.cpp
@@ -30,6 +30,14 @@ SSurfaceTreeNode* createTree(wlr_surface* pSurface) {
PNODE->hyprListener_commit.initCallback(&pSurface->events.commit, &Events::listener_commitSubsurface, PNODE, "SurfaceTreeNode");
PNODE->hyprListener_destroy.initCallback(&pSurface->events.destroy, &Events::listener_destroySubsurfaceNode, PNODE, "SurfaceTreeNode");
+ wlr_subsurface* wlrSubsurface;
+ wl_list_for_each(wlrSubsurface, &pSurface->current.subsurfaces_below, current.link) {
+ Events::listener_newSubsurfaceNode(PNODE, wlrSubsurface);
+ }
+ wl_list_for_each(wlrSubsurface, &pSurface->current.subsurfaces_above, current.link) {
+ Events::listener_newSubsurfaceNode(PNODE, wlrSubsurface);
+ }
+
return PNODE;
}
@@ -109,6 +117,14 @@ void Events::listener_newSubsurfaceNode(void* owner, void* data) {
PNEWSUBSURFACE->hyprListener_map.initCallback(&PSUBSURFACE->events.map, &Events::listener_mapSubsurface, PNEWSUBSURFACE, "Subsurface");
PNEWSUBSURFACE->hyprListener_unmap.initCallback(&PSUBSURFACE->events.unmap, &Events::listener_unmapLayerSurface, PNEWSUBSURFACE, "Subsurface");
PNEWSUBSURFACE->hyprListener_destroy.initCallback(&PSUBSURFACE->events.destroy, &Events::listener_destroySubsurface, PNEWSUBSURFACE, "Subsurface");
+
+ wlr_subsurface* existingWlrSubsurface;
+ wl_list_for_each(existingWlrSubsurface, &PSUBSURFACE->surface->current.subsurfaces_below, current.link) {
+ listener_newSubsurfaceNode(pNode, existingWlrSubsurface);
+ }
+ wl_list_for_each(existingWlrSubsurface, &PSUBSURFACE->surface->current.subsurfaces_above, current.link) {
+ listener_newSubsurfaceNode(pNode, existingWlrSubsurface);
+ }
}
void Events::listener_mapSubsurface(void* owner, void* data) {