From b8002792e4896c4bc5b302832691bd0bf85a50da Mon Sep 17 00:00:00 2001 From: MightyPlaza <123664421+MightyPlaza@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:57:46 +0100 Subject: [PATCH] layer: don't close special ws when restoring focus modified: src/Compositor.cpp modified: src/Compositor.hpp modified: src/desktop/LayerSurface.cpp --- src/Compositor.cpp | 11 +++++++++++ src/Compositor.hpp | 1 + src/desktop/LayerSurface.cpp | 4 ++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 5cb7c7be24c1..9487e247e4d8 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1108,6 +1108,17 @@ bool CCompositor::isWorkspaceVisible(PHLWORKSPACE w) { return valid(w) && w->m_bVisible; } +bool CCompositor::isWorkspaceVisibleNotCovered(PHLWORKSPACE w) { + if (!valid(w)) + return false; + + const auto PMONITOR = getMonitorFromID(w->m_iMonitorID); + if (PMONITOR->activeSpecialWorkspace) + return PMONITOR->activeSpecialWorkspace->m_iID == w->m_iID; + + return PMONITOR->activeWorkspace->m_iID == w->m_iID; +} + PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) { for (auto& w : m_vWorkspaces) { if (w->m_iID == id && !w->inert()) diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 793899eedb77..458e37a7adcc 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -118,6 +118,7 @@ class CCompositor { PHLWINDOW getWindowFromSurface(SP); PHLWINDOW getWindowFromHandle(uint32_t); bool isWorkspaceVisible(PHLWORKSPACE); + bool isWorkspaceVisibleNotCovered(PHLWORKSPACE); PHLWORKSPACE getWorkspaceByID(const int&); PHLWORKSPACE getWorkspaceByName(const std::string&); PHLWORKSPACE getWorkspaceByString(const std::string&); diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp index 62cae8f6e126..52666e734995 100644 --- a/src/desktop/LayerSurface.cpp +++ b/src/desktop/LayerSurface.cpp @@ -227,7 +227,7 @@ void CLayerSurface::onUnmap() { foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &PMONITOR->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords, &pFoundLayerSurface); - if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->isWorkspaceVisible(g_pCompositor->m_pLastWindow->m_pWorkspace)) { + if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->isWorkspaceVisibleNotCovered(g_pCompositor->m_pLastWindow->m_pWorkspace)) { // if there isn't any, focus the last window const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock(); g_pCompositor->focusWindow(nullptr); @@ -512,4 +512,4 @@ int CLayerSurface::popupsCount() { int no = -1; // we have one dummy popupHead->breadthfirst([](CPopup* p, void* data) { *(int*)data += 1; }, &no); return no; -} \ No newline at end of file +}