diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 294ba78e..a2a82b4e 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1090,6 +1090,10 @@ CWorkspace* CCompositor::getWorkspaceByID(const int& id) { void CCompositor::sanityCheckWorkspaces() { auto it = m_vWorkspaces.begin(); while (it != m_vWorkspaces.end()) { + + if ((*it)->m_bIndestructible) + continue; + const auto WINDOWSONWORKSPACE = getWindowsOnWorkspace((*it)->m_iID); if ((*it)->m_bIsSpecialWorkspace && WINDOWSONWORKSPACE == 0) { @@ -1884,9 +1888,13 @@ void CCompositor::moveWorkspaceToMonitor(CWorkspace* pWorkspace, CMonitor* pMoni Debug::log(LOG, "moveWorkspaceToMonitor: Plugging gap with existing %d", nextWorkspaceOnMonitorID); + pWorkspace->m_bIndestructible = true; // so that changeworkspace doesn't yeet it if it's empty + g_pKeybindManager->focusMonitor(std::to_string(POLDMON->ID)); g_pKeybindManager->changeworkspace(std::to_string(nextWorkspaceOnMonitorID)); + pWorkspace->m_bIndestructible = false; + // move the workspace pWorkspace->m_iMonitorID = pMonitor->ID; diff --git a/src/helpers/Workspace.hpp b/src/helpers/Workspace.hpp index 4e76291b..576ef564 100644 --- a/src/helpers/Workspace.hpp +++ b/src/helpers/Workspace.hpp @@ -3,7 +3,8 @@ #include "../defines.hpp" #include "AnimatedVariable.hpp" -enum eFullscreenMode : uint8_t { +enum eFullscreenMode : uint8_t +{ FULLSCREEN_FULL = 0, FULLSCREEN_MAXIMIZED }; @@ -46,8 +47,11 @@ class CWorkspace { CWindow* m_pLastFocusedWindow = nullptr; // user-set - bool m_bDefaultFloating = false; - bool m_bDefaultPseudo = false; + bool m_bDefaultFloating = false; + bool m_bDefaultPseudo = false; + + // don't destroy in sanity check + bool m_bIndestructible = false; void startAnim(bool in, bool left, bool instant = false); void setActive(bool on);