diff options
author | Sungyoon Cho <[email protected]> | 2024-04-09 20:08:38 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2024-04-09 12:08:38 +0100 |
commit | fcac25bcc2496dc248e9ee912d95ec38b5397acd (patch) | |
tree | e86dfd34d6f26dbcc4ea14978d7d447a2efa7ffc /src/desktop/Workspace.cpp | |
parent | f6786f04d2bf46baf01b2a1a3686871ef46f59e9 (diff) | |
download | Hyprland-fcac25bcc2496dc248e9ee912d95ec38b5397acd.tar.gz Hyprland-fcac25bcc2496dc248e9ee912d95ec38b5397acd.zip |
workspace: Add count group flag in windowCount workspace selector prop (#5499)
* Add groupCount workspace selector prop
* Intergrate groupCount with windowCount
Diffstat (limited to 'src/desktop/Workspace.cpp')
-rw-r--r-- | src/desktop/Workspace.cpp | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index cbc4b16e..70a0f370 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -249,7 +249,8 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { // s - special: s[true] // n - named: n[true] or n[s:string] or n[e:string] // m - monitor: m[monitor_selector] - // w - windowCount: w[0-4] or w[1], optional flag t or f for tiled or floating, e.g. w[t0-1] + // w - windowCount: w[1-4] or w[1], optional flag t or f for tiled or floating and + // flag g to count groups instead of windows, e.g. w[t1-2], w[fg4] const auto NEXTSPACE = selector.find_first_of(' ', i); std::string prop = selector.substr(i, NEXTSPACE == std::string::npos ? std::string::npos : NEXTSPACE - i); @@ -354,15 +355,25 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { prop = prop.substr(2, prop.length() - 3); - int wantsOnlyTiled = -1; - - if (prop.starts_with("t")) { - wantsOnlyTiled = 1; - prop = prop.substr(1); - } else if (prop.starts_with("f")) { - wantsOnlyTiled = 0; - prop = prop.substr(1); + int wantsOnlyTiled = -1; + bool wantsCountGroup = false; + + int flagCount = 0; + for (auto& flag : prop) { + if (flag == 't' && wantsOnlyTiled == -1) { + wantsOnlyTiled = 1; + flagCount++; + } else if (flag == 'f' && wantsOnlyTiled == -1) { + wantsOnlyTiled = 0; + flagCount++; + } else if (flag == 'g' && !wantsCountGroup) { + wantsCountGroup = true; + flagCount++; + } else { + break; + } } + prop = prop.substr(flagCount); if (!prop.contains("-")) { // try single @@ -379,7 +390,15 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { return false; } - return g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)) == from; + int count; + if (wantsCountGroup) + count = g_pCompositor->getGroupsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)); + else + count = g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)); + + if (count != from) + return false; + continue; } const auto DASHPOS = prop.find("-"); @@ -403,8 +422,13 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { return false; } - const auto WINDOWSONWORKSPACE = g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)); - if (std::clamp(WINDOWSONWORKSPACE, from, to) != WINDOWSONWORKSPACE) + int count; + if (wantsCountGroup) + count = g_pCompositor->getGroupsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)); + else + count = g_pCompositor->getWindowsOnWorkspace(m_iID, wantsOnlyTiled == -1 ? std::nullopt : std::optional<bool>((bool)wantsOnlyTiled)); + + if (std::clamp(count, from, to) != count) return false; continue; } |