diff --git a/src/Window.cpp b/src/Window.cpp index d04650238..b29d87e02 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -386,6 +386,8 @@ void unregisterVar(void* ptr) { } void CWindow::onUnmap() { + static auto* const PCLOSEONLASTSPECIAL = &g_pConfigManager->getConfigValuePtr("misc:close_special_on_empty")->intValue; + if (g_pCompositor->m_pLastWindow == this) g_pCompositor->m_pLastWindow = nullptr; @@ -405,6 +407,12 @@ void CWindow::onUnmap() { m_pWLSurface.unassign(); hyprListener_unmapWindow.removeCallback(); + + if (*PCLOSEONLASTSPECIAL && g_pCompositor->getWindowsOnWorkspace(m_iWorkspaceID) == 0 && g_pCompositor->isWorkspaceSpecial(m_iWorkspaceID)) { + const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID); + if (PMONITOR) + PMONITOR->setSpecialWorkspace(nullptr); + } } void CWindow::onMap() { diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index ce9da11bd..48b4dee5c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -113,6 +113,7 @@ void CConfigManager::setDefaultVars() { configValues["misc:render_titles_in_groupbar"].intValue = 1; configValues["misc:groupbar_titles_font_size"].intValue = 8; configValues["misc:groupbar_gradients"].intValue = 1; + configValues["misc:close_special_on_empty"].intValue = 1; configValues["misc:groupbar_text_color"].intValue = 0xffffffff; configValues["misc:background_color"].intValue = 0xff111111;