summaryrefslogtreecommitdiff
path: root/src/desktop/LayerSurface.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-11-17 18:34:02 +0000
committerGitHub <noreply@github.com>2025-11-17 18:34:02 +0000
commitc2670e9ab90bd657e87a1da2c5322e9007dce01f (patch)
treecd033fe3a9b87b1b0d457df043ecc50929ad3c8d /src/desktop/LayerSurface.cpp
parent95ee08b3403b90e2930d46425cada1d280f3524e (diff)
windowrules: rewrite completely (#12269)
Reworks the window rule syntax completely --------- Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
Diffstat (limited to 'src/desktop/LayerSurface.cpp')
-rw-r--r--src/desktop/LayerSurface.cpp85
1 files changed, 4 insertions, 81 deletions
diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp
index 6278078d..aab0b15a 100644
--- a/src/desktop/LayerSurface.cpp
+++ b/src/desktop/LayerSurface.cpp
@@ -37,7 +37,7 @@ PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
pLS->m_monitor = pMonitor;
pMonitor->m_layerSurfaceLayers[resource->m_current.layer].emplace_back(pLS);
- pLS->m_forceBlur = g_pConfigManager->shouldBlurLS(pLS->m_namespace);
+ pLS->m_ruleApplicator = makeUnique<Desktop::Rule::CLayerRuleApplicator>(pLS);
g_pAnimationManager->createAnimation(0.f, pLS->m_alpha, g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"), pLS, AVARDAMAGE_ENTIRE);
g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->m_realPosition, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE);
@@ -55,7 +55,7 @@ PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
void CLayerSurface::registerCallbacks() {
m_alpha->setUpdateCallback([this](auto) {
- if (m_dimAround && m_monitor)
+ if (m_ruleApplicator->dimAround().valueOrDefault() && m_monitor)
g_pHyprRenderer->damageMonitor(m_monitor.lock());
});
}
@@ -137,6 +137,8 @@ void CLayerSurface::onMap() {
m_mapped = true;
m_interactivity = m_layerSurface->m_current.interactivity;
+ m_ruleApplicator->propertiesChanged(Desktop::Rule::RULE_PROP_ALL);
+
m_layerSurface->m_surface->map();
// this layer might be re-mapped.
@@ -149,8 +151,6 @@ void CLayerSurface::onMap() {
if (!PMONITOR)
return;
- applyRules();
-
PMONITOR->m_scheduledRecalc = true;
g_pHyprRenderer->arrangeLayersForMonitor(PMONITOR->m_id);
@@ -398,83 +398,6 @@ void CLayerSurface::onCommit() {
g_pCompositor->setPreferredTransformForSurface(m_surface->resource(), PMONITOR->m_transform);
}
-void CLayerSurface::applyRules() {
- m_noAnimations = false;
- m_forceBlur = false;
- m_ignoreAlpha = false;
- m_dimAround = false;
- m_noScreenShare = false;
- m_ignoreAlphaValue = 0.f;
- m_xray = -1;
- m_animationStyle.reset();
-
- for (auto const& rule : g_pConfigManager->getMatchingRules(m_self.lock())) {
- switch (rule->m_ruleType) {
- case CLayerRule::RULE_NOANIM: {
- m_noAnimations = true;
- break;
- }
- case CLayerRule::RULE_BLUR: {
- m_forceBlur = true;
- break;
- }
- case CLayerRule::RULE_BLURPOPUPS: {
- m_forceBlurPopups = true;
- break;
- }
- case CLayerRule::RULE_IGNOREALPHA:
- case CLayerRule::RULE_IGNOREZERO: {
- const auto FIRST_SPACE_POS = rule->m_rule.find_first_of(' ');
- std::string alphaValue = "";
- if (FIRST_SPACE_POS != std::string::npos)
- alphaValue = rule->m_rule.substr(FIRST_SPACE_POS + 1);
-
- try {
- m_ignoreAlpha = true;
- if (!alphaValue.empty())
- m_ignoreAlphaValue = std::stof(alphaValue);
- } catch (...) { Debug::log(ERR, "Invalid value passed to ignoreAlpha"); }
- break;
- }
- case CLayerRule::RULE_DIMAROUND: {
- m_dimAround = true;
- break;
- }
- case CLayerRule::RULE_NOSCREENSHARE: {
- m_noScreenShare = true;
- break;
- }
- case CLayerRule::RULE_XRAY: {
- CVarList vars{rule->m_rule, 0, ' '};
- m_xray = configStringToInt(vars[1]).value_or(false);
-
- break;
- }
- case CLayerRule::RULE_ANIMATION: {
- CVarList vars{rule->m_rule, 2, 's'};
- m_animationStyle = vars[1];
- break;
- }
- case CLayerRule::RULE_ORDER: {
- CVarList vars{rule->m_rule, 2, 's'};
- try {
- m_order = std::stoi(vars[1]);
- } catch (...) { Debug::log(ERR, "Invalid value passed to order"); }
- break;
- }
- case CLayerRule::RULE_ABOVELOCK: {
- m_aboveLockscreen = true;
-
- CVarList vars{rule->m_rule, 0, ' '};
- m_aboveLockscreenInteractable = configStringToInt(vars[1]).value_or(false);
-
- break;
- }
- default: break;
- }
- }
-}
-
bool CLayerSurface::isFadedOut() {
if (!m_fadingOut)
return false;