From 7a29957ad1ea577fc6d55545fa1d5e0f83d176df Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 6 Apr 2024 15:58:57 +0500 Subject: [PATCH 1/5] workspacerules: add back on-created-empty functionality --- src/Compositor.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 43473c2c886..adf2faa14f1 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1256,12 +1256,23 @@ PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) { void CCompositor::sanityCheckWorkspaces() { auto it = m_vWorkspaces.begin(); while (it != m_vWorkspaces.end()) { + const auto& WORKSPACE = *it; + // If ref == 1, only the compositor holds a ref, which means it's inactive and has no mapped windows. - if (!(*it)->m_bPersistent && it->use_count() == 1) { + if (!WORKSPACE->m_bPersistent && WORKSPACE.use_count() == 1) { it = m_vWorkspaces.erase(it); continue; } + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(*it); + + if (!WORKSPACE->m_bOnCreatedEmptyExecuted) { + if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) + g_pKeybindManager->spawn(*cmd); + + WORKSPACE->m_bOnCreatedEmptyExecuted = true; + } + ++it; } } From 7f96b797b01002ae1cb35cd4fa7dbaf3f5dd4e31 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 6 Apr 2024 16:09:54 +0500 Subject: [PATCH 2/5] clang format --- src/Compositor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index adf2faa14f1..ffd054f8dc5 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1256,7 +1256,7 @@ PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) { void CCompositor::sanityCheckWorkspaces() { auto it = m_vWorkspaces.begin(); while (it != m_vWorkspaces.end()) { - const auto& WORKSPACE = *it; + const auto& WORKSPACE = *it; // If ref == 1, only the compositor holds a ref, which means it's inactive and has no mapped windows. if (!WORKSPACE->m_bPersistent && WORKSPACE.use_count() == 1) { @@ -1267,8 +1267,8 @@ void CCompositor::sanityCheckWorkspaces() { const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(*it); if (!WORKSPACE->m_bOnCreatedEmptyExecuted) { - if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) - g_pKeybindManager->spawn(*cmd); + if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) + g_pKeybindManager->spawn(*cmd); WORKSPACE->m_bOnCreatedEmptyExecuted = true; } From 680a6167cfefa0a653c79c23ab40cfb0729503f2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 6 Apr 2024 17:36:43 +0500 Subject: [PATCH 3/5] workspacerules: spawn on-created-empty window while initializing CWorkspace --- src/Compositor.cpp | 9 --------- src/desktop/Workspace.cpp | 3 +++ src/desktop/Workspace.hpp | 3 --- src/managers/KeybindManager.hpp | 1 + 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index ffd054f8dc5..53c486485f9 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1264,15 +1264,6 @@ void CCompositor::sanityCheckWorkspaces() { continue; } - const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(*it); - - if (!WORKSPACE->m_bOnCreatedEmptyExecuted) { - if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) - g_pKeybindManager->spawn(*cmd); - - WORKSPACE->m_bOnCreatedEmptyExecuted = true; - } - ++it; } } diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index 7146e13d9e9..734b7c8e48e 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -44,6 +44,9 @@ void CWorkspace::init(PHLWORKSPACE self) { const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(self); m_bPersistent = WORKSPACERULE.isPersistent; + if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd) + g_pKeybindManager->spawn(*cmd); + g_pEventManager->postEvent({"createworkspace", m_szName}); g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_iID, m_szName)}); EMIT_HOOK_EVENT("createWorkspace", this); diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp index 26fe38d9560..af42b8f4654 100644 --- a/src/desktop/Workspace.hpp +++ b/src/desktop/Workspace.hpp @@ -58,9 +58,6 @@ class CWorkspace { // last monitor (used on reconnect) std::string m_szLastMonitor = ""; - // Whether the user configured command for on-created-empty has been executed, if any - bool m_bOnCreatedEmptyExecuted = false; - bool m_bPersistent = false; // Inert: destroyed and invalid. If this is true, release the ptr you have. diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 7b87faa8e57..aec9e02d937 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -179,6 +179,7 @@ class CKeybindManager { friend class CCompositor; friend class CInputManager; friend class CConfigManager; + friend class CWorkspace; }; inline std::unique_ptr g_pKeybindManager; From ea985914fd2864cf044d55b8f491d744d4d35c59 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 6 Apr 2024 17:41:09 +0500 Subject: [PATCH 4/5] clang format --- src/desktop/Workspace.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp index af42b8f4654..db2fe25ef77 100644 --- a/src/desktop/Workspace.hpp +++ b/src/desktop/Workspace.hpp @@ -58,7 +58,7 @@ class CWorkspace { // last monitor (used on reconnect) std::string m_szLastMonitor = ""; - bool m_bPersistent = false; + bool m_bPersistent = false; // Inert: destroyed and invalid. If this is true, release the ptr you have. bool inert(); From 3413500946fe39d26affe7030a1884b29ce34317 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 6 Apr 2024 18:21:33 +0500 Subject: [PATCH 5/5] configManager: fix typo --- src/config/ConfigManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index a622e6d0293..f3fd9b7f72a 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2237,8 +2237,8 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin // rules = value.substr(WORKSPACE_DELIM + 1); // } - const static std::string ruleOnCreatedEmtpy = "on-created-empty:"; - const static int ruleOnCreatedEmtpyLen = ruleOnCreatedEmtpy.length(); + const static std::string ruleOnCreatedEmpty = "on-created-empty:"; + const static int ruleOnCreatedEmptyLen = ruleOnCreatedEmpty.length(); auto assignRule = [&](std::string rule) -> std::optional { size_t delim = std::string::npos; @@ -2274,8 +2274,8 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin wsRule.isPersistent = configStringToInt(rule.substr(delim + 11)); else if ((delim = rule.find("defaultName:")) != std::string::npos) wsRule.defaultName = rule.substr(delim + 12); - else if ((delim = rule.find(ruleOnCreatedEmtpy)) != std::string::npos) - wsRule.onCreatedEmptyRunCmd = cleanCmdForWorkspace(name, rule.substr(delim + ruleOnCreatedEmtpyLen)); + else if ((delim = rule.find(ruleOnCreatedEmpty)) != std::string::npos) + wsRule.onCreatedEmptyRunCmd = cleanCmdForWorkspace(name, rule.substr(delim + ruleOnCreatedEmptyLen)); else if ((delim = rule.find("layoutopt:")) != std::string::npos) { std::string opt = rule.substr(delim + 10); if (!opt.contains(":")) {