summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index b145022c..0f67b9b1 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -2150,11 +2150,28 @@ void CCompositor::closeWindow(CWindow* pWindow) {
}
SLayerSurface* CCompositor::getLayerSurfaceFromSurface(wlr_surface* pSurface) {
+ std::pair<wlr_surface*, bool> result = {pSurface, false};
+
for (auto& m : m_vMonitors) {
for (auto& lsl : m->m_aLayerSurfaceLayers) {
for (auto& ls : lsl) {
if (ls->layerSurface && ls->layerSurface->surface == pSurface)
return ls.get();
+
+ static auto iter = [](wlr_surface* surf, int x, int y, void* data) -> void {
+ if (surf == ((std::pair<wlr_surface*, bool>*)data)->first) {
+ *(bool*)data = true;
+ return;
+ }
+ };
+
+ if (!ls->layerSurface || !ls->mapped)
+ continue;
+
+ wlr_surface_for_each_surface(ls->layerSurface->surface, iter, &result);
+
+ if (result.second)
+ return ls.get();
}
}
}