mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 04:09:49 +01:00
configmanager: store workspace rules as a deque
This commit is contained in:
parent
8435d6fc12
commit
a5d63a0324
2 changed files with 17 additions and 16 deletions
|
@ -583,7 +583,7 @@ void CConfigManager::handleMonitor(const std::string& command, const std::string
|
||||||
wsRule.workspaceName = name;
|
wsRule.workspaceName = name;
|
||||||
wsRule.workspaceId = wsId;
|
wsRule.workspaceId = wsId;
|
||||||
|
|
||||||
m_mWorkspaceRules[wsId] = wsRule;
|
m_dWorkspaceRules.emplace_back(wsRule);
|
||||||
argno++;
|
argno++;
|
||||||
} else {
|
} else {
|
||||||
Debug::log(ERR, "Config error: invalid monitor syntax");
|
Debug::log(ERR, "Config error: invalid monitor syntax");
|
||||||
|
@ -1033,6 +1033,7 @@ void CConfigManager::handleWorkspaceRules(const std::string& command, const std:
|
||||||
}
|
}
|
||||||
wsRule.monitor = first_ident;
|
wsRule.monitor = first_ident;
|
||||||
wsRule.workspaceString = wsIdent;
|
wsRule.workspaceString = wsIdent;
|
||||||
|
wsRule.isDefault = true; // backwards compat
|
||||||
rules = value.substr(WORKSPACE_DELIM + 1);
|
rules = value.substr(WORKSPACE_DELIM + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1053,6 +1054,8 @@ void CConfigManager::handleWorkspaceRules(const std::string& command, const std:
|
||||||
wsRule.decorate = configStringToInt(rule.substr(delim + 9));
|
wsRule.decorate = configStringToInt(rule.substr(delim + 9));
|
||||||
else if ((delim = rule.find("monitor:")) != std::string::npos)
|
else if ((delim = rule.find("monitor:")) != std::string::npos)
|
||||||
wsRule.monitor = rule.substr(delim + 8);
|
wsRule.monitor = rule.substr(delim + 8);
|
||||||
|
else if ((delim = rule.find("default:")) != std::string::npos)
|
||||||
|
wsRule.isDefault = configStringToInt(rule.substr(delim + 9));
|
||||||
};
|
};
|
||||||
|
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
|
@ -1064,9 +1067,10 @@ void CConfigManager::handleWorkspaceRules(const std::string& command, const std:
|
||||||
}
|
}
|
||||||
assignRule(rules); // match remaining rule
|
assignRule(rules); // match remaining rule
|
||||||
|
|
||||||
wsRule.workspaceId = id;
|
wsRule.workspaceId = id;
|
||||||
wsRule.workspaceName = name;
|
wsRule.workspaceName = name;
|
||||||
m_mWorkspaceRules[id] = wsRule;
|
|
||||||
|
m_dWorkspaceRules.emplace_back(wsRule);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigManager::handleSubmap(const std::string& command, const std::string& submap) {
|
void CConfigManager::handleSubmap(const std::string& command, const std::string& submap) {
|
||||||
|
@ -1377,7 +1381,7 @@ void CConfigManager::loadConfigLoadVars() {
|
||||||
deviceConfigs.clear();
|
deviceConfigs.clear();
|
||||||
m_dBlurLSNamespaces.clear();
|
m_dBlurLSNamespaces.clear();
|
||||||
boundWorkspaces.clear();
|
boundWorkspaces.clear();
|
||||||
m_mWorkspaceRules.clear();
|
m_dWorkspaceRules.clear();
|
||||||
setDefaultAnimationVars(); // reset anims
|
setDefaultAnimationVars(); // reset anims
|
||||||
m_vDeclaredPlugins.clear();
|
m_vDeclaredPlugins.clear();
|
||||||
m_dLayerRules.clear();
|
m_dLayerRules.clear();
|
||||||
|
@ -1681,14 +1685,10 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const std::string& name, const st
|
||||||
}
|
}
|
||||||
|
|
||||||
SWorkspaceRule CConfigManager::getWorkspaceRuleFor(CWorkspace* pWorkspace) {
|
SWorkspaceRule CConfigManager::getWorkspaceRuleFor(CWorkspace* pWorkspace) {
|
||||||
if (m_mWorkspaceRules.contains(pWorkspace->m_iID)) {
|
const auto IT = std::find_if(m_dWorkspaceRules.begin(), m_dWorkspaceRules.end(), [&](const auto& other) { return other.workspaceName == pWorkspace->m_szName; });
|
||||||
return m_mWorkspaceRules.at(pWorkspace->m_iID);
|
if (IT == m_dWorkspaceRules.end())
|
||||||
}
|
|
||||||
|
|
||||||
const auto IT = std::find_if(m_mWorkspaceRules.begin(), m_mWorkspaceRules.end(), [&](const auto& other) { return other.second.workspaceName == pWorkspace->m_szName; });
|
|
||||||
if (IT == m_mWorkspaceRules.end())
|
|
||||||
return SWorkspaceRule{};
|
return SWorkspaceRule{};
|
||||||
return IT->second;
|
return *IT;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<SWindowRule> CConfigManager::getMatchingRules(CWindow* pWindow) {
|
std::vector<SWindowRule> CConfigManager::getMatchingRules(CWindow* pWindow) {
|
||||||
|
@ -2098,8 +2098,8 @@ void CConfigManager::removePluginConfig(HANDLE handle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) {
|
std::string CConfigManager::getDefaultWorkspaceFor(const std::string& name) {
|
||||||
const auto IT = std::find_if(m_mWorkspaceRules.begin(), m_mWorkspaceRules.end(), [&](const auto& other) { return other.second.monitor == name; });
|
const auto IT = std::find_if(m_dWorkspaceRules.begin(), m_dWorkspaceRules.end(), [&](const auto& other) { return other.monitor == name && other.isDefault; });
|
||||||
if (IT == m_mWorkspaceRules.end())
|
if (IT == m_dWorkspaceRules.end())
|
||||||
return "";
|
return "";
|
||||||
return IT->second.workspaceString;
|
return IT->workspaceString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ struct SWorkspaceRule {
|
||||||
std::string workspaceString = "";
|
std::string workspaceString = "";
|
||||||
std::string workspaceName = "";
|
std::string workspaceName = "";
|
||||||
int workspaceId = -1;
|
int workspaceId = -1;
|
||||||
|
bool isDefault = false;
|
||||||
std::optional<int64_t> gapsIn;
|
std::optional<int64_t> gapsIn;
|
||||||
std::optional<int64_t> gapsOut;
|
std::optional<int64_t> gapsOut;
|
||||||
std::optional<int64_t> borderSize;
|
std::optional<int64_t> borderSize;
|
||||||
|
@ -226,7 +227,7 @@ class CConfigManager {
|
||||||
bool isFirstLaunch = true; // For exec-once
|
bool isFirstLaunch = true; // For exec-once
|
||||||
|
|
||||||
std::deque<SMonitorRule> m_dMonitorRules;
|
std::deque<SMonitorRule> m_dMonitorRules;
|
||||||
std::unordered_map<int, SWorkspaceRule> m_mWorkspaceRules;
|
std::deque<SWorkspaceRule> m_dWorkspaceRules;
|
||||||
std::deque<SWindowRule> m_dWindowRules;
|
std::deque<SWindowRule> m_dWindowRules;
|
||||||
std::deque<SLayerRule> m_dLayerRules;
|
std::deque<SLayerRule> m_dLayerRules;
|
||||||
std::deque<std::string> m_dBlurLSNamespaces;
|
std::deque<std::string> m_dBlurLSNamespaces;
|
||||||
|
|
Loading…
Reference in a new issue