mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-26 01:45:58 +01:00
config: add order rule for layers (#7697)
This commit is contained in:
parent
43e1415e71
commit
04421063af
4 changed files with 11 additions and 1 deletions
|
@ -2239,7 +2239,7 @@ bool windowRuleValid(const std::string& RULE) {
|
||||||
|
|
||||||
bool layerRuleValid(const std::string& RULE) {
|
bool layerRuleValid(const std::string& RULE) {
|
||||||
static const auto rules = std::unordered_set<std::string>{"noanim", "blur", "blurpopups", "dimaround"};
|
static const auto rules = std::unordered_set<std::string>{"noanim", "blur", "blurpopups", "dimaround"};
|
||||||
static const auto rulesPrefix = std::vector<std::string>{"ignorealpha", "ignorezero", "xray", "animation"};
|
static const auto rulesPrefix = std::vector<std::string>{"ignorealpha", "ignorezero", "xray", "animation", "order"};
|
||||||
|
|
||||||
return rules.contains(RULE) || std::any_of(rulesPrefix.begin(), rulesPrefix.end(), [&RULE](auto prefix) { return RULE.starts_with(prefix); });
|
return rules.contains(RULE) || std::any_of(rulesPrefix.begin(), rulesPrefix.end(), [&RULE](auto prefix) { return RULE.starts_with(prefix); });
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,6 +394,11 @@ void CLayerSurface::applyRules() {
|
||||||
} else if (rule.rule.starts_with("animation")) {
|
} else if (rule.rule.starts_with("animation")) {
|
||||||
CVarList vars{rule.rule, 2, 's'};
|
CVarList vars{rule.rule, 2, 's'};
|
||||||
animationStyle = vars[1];
|
animationStyle = vars[1];
|
||||||
|
} else if (rule.rule.starts_with("order")) {
|
||||||
|
CVarList vars{rule.rule, 2, 's'};
|
||||||
|
try {
|
||||||
|
order = std::stoi(vars[1]);
|
||||||
|
} catch (...) { Debug::log(ERR, "Invalid value passed to order"); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ class CLayerSurface {
|
||||||
bool ignoreAlpha = false;
|
bool ignoreAlpha = false;
|
||||||
float ignoreAlphaValue = 0.f;
|
float ignoreAlphaValue = 0.f;
|
||||||
bool dimAround = false;
|
bool dimAround = false;
|
||||||
|
int64_t order = 0;
|
||||||
|
|
||||||
std::optional<std::string> animationStyle;
|
std::optional<std::string> animationStyle;
|
||||||
|
|
||||||
|
|
|
@ -1742,6 +1742,10 @@ void CHyprRenderer::arrangeLayersForMonitor(const MONITORID& monitor) {
|
||||||
|
|
||||||
CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y};
|
CBox usableArea = {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y};
|
||||||
|
|
||||||
|
for (auto& la : PMONITOR->m_aLayerSurfaceLayers) {
|
||||||
|
std::stable_sort(la.begin(), la.end(), [](const PHLLSREF& a, const PHLLSREF& b) { return a->order > b->order; });
|
||||||
|
}
|
||||||
|
|
||||||
for (auto const& la : PMONITOR->m_aLayerSurfaceLayers)
|
for (auto const& la : PMONITOR->m_aLayerSurfaceLayers)
|
||||||
arrangeLayerArray(PMONITOR, la, true, &usableArea);
|
arrangeLayerArray(PMONITOR, la, true, &usableArea);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue