summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/desktop/Window.cpp19
-rw-r--r--src/protocols/core/Compositor.cpp13
-rw-r--r--src/protocols/core/Compositor.hpp1
3 files changed, 26 insertions, 7 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index fbf63243..8671c003 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1927,13 +1927,18 @@ SP<CWLSurfaceResource> CWindow::getSolitaryResource() {
if (res->m_subsurfaces.size() == 0)
return res;
- if (res->m_subsurfaces.size() == 1) {
- if (res->m_subsurfaces[0].expired() || res->m_subsurfaces[0]->m_surface.expired())
- return nullptr;
- auto surf = res->m_subsurfaces[0]->m_surface.lock();
- if (!surf || surf->m_subsurfaces.size() != 0 || surf->extends() != res->extends() || !surf->m_current.texture || !surf->m_current.texture->m_opaque)
- return nullptr;
- return surf;
+ if (res->m_subsurfaces.size() >= 1) {
+ if (!res->hasVisibleSubsurface())
+ return res;
+
+ if (res->m_subsurfaces.size() == 1) {
+ if (res->m_subsurfaces[0].expired() || res->m_subsurfaces[0]->m_surface.expired())
+ return nullptr;
+ auto surf = res->m_subsurfaces[0]->m_surface.lock();
+ if (!surf || surf->m_subsurfaces.size() != 0 || surf->extends() != res->extends() || !surf->m_current.texture || !surf->m_current.texture->m_opaque)
+ return nullptr;
+ return surf;
+ }
}
return nullptr;
diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp
index 06a4587f..ed36b1f9 100644
--- a/src/protocols/core/Compositor.cpp
+++ b/src/protocols/core/Compositor.cpp
@@ -602,6 +602,19 @@ void CWLSurfaceResource::sortSubsurfaces() {
}
}
+bool CWLSurfaceResource::hasVisibleSubsurface() {
+ for (auto const& subsurface : m_subsurfaces) {
+ if (!subsurface || !subsurface->m_surface)
+ continue;
+
+ const auto& surf = subsurface->m_surface;
+ if (surf->m_current.size.x > 0 && surf->m_current.size.y > 0)
+ return true;
+ }
+
+ return false;
+}
+
void CWLSurfaceResource::updateCursorShm(CRegion damage) {
if (damage.empty())
return;
diff --git a/src/protocols/core/Compositor.hpp b/src/protocols/core/Compositor.hpp
index c024a3eb..0dc03cf4 100644
--- a/src/protocols/core/Compositor.hpp
+++ b/src/protocols/core/Compositor.hpp
@@ -128,6 +128,7 @@ class CWLSurfaceResource {
void commitState(SSurfaceState& state);
NColorManagement::SImageDescription getPreferredImageDescription();
void sortSubsurfaces();
+ bool hasVisibleSubsurface();
// returns a pair: found surface (null if not found) and surface local coords.
// localCoords param is relative to 0,0 of this surface