summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorstaz <alyystaz@gmail.com>2024-04-06 19:53:32 +0500
committerGitHub <noreply@github.com>2024-04-06 15:53:32 +0100
commit1596e2d1f7db76c4a367a6beb814d79db019d8d2 (patch)
treef16ca929542de890e66501417a88741393df4e3f /src
parent6cea710ac8e966366763b9609895dcef7fdb5bcb (diff)
workspacerules: add back on-created-empty functionality (#5452)
* workspacerules: add back on-created-empty functionality * clang format * workspacerules: spawn on-created-empty window while initializing CWorkspace * clang format * configManager: fix typo --------- Co-authored-by: Your Name <you@example.com>
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp4
-rw-r--r--src/config/ConfigManager.cpp8
-rw-r--r--src/desktop/Workspace.cpp3
-rw-r--r--src/desktop/Workspace.hpp5
-rw-r--r--src/managers/KeybindManager.hpp1
5 files changed, 12 insertions, 9 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index cdd1d15b..6c0025ea 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1256,8 +1256,10 @@ 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;
}
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index a622e6d0..f3fd9b7f 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -2237,8 +2237,8 @@ std::optional<std::string> 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<std::string> {
size_t delim = std::string::npos;
@@ -2274,8 +2274,8 @@ std::optional<std::string> 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(":")) {
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp
index 7146e13d..734b7c8e 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 26fe38d9..db2fe25e 100644
--- a/src/desktop/Workspace.hpp
+++ b/src/desktop/Workspace.hpp
@@ -58,10 +58,7 @@ 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;
+ bool m_bPersistent = false;
// Inert: destroyed and invalid. If this is true, release the ptr you have.
bool inert();
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index 7b87faa8..aec9e02d 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<CKeybindManager> g_pKeybindManager;