summaryrefslogtreecommitdiff
path: root/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
diff options
context:
space:
mode:
authorVirt <41426325+VirtCode@users.noreply.github.com>2026-03-06 21:11:42 +0100
committerGitHub <noreply@github.com>2026-03-06 20:11:42 +0000
commite0c571005912c342d8d812b368bc490cb6f28796 (patch)
tree8591722027f451f2714e982c76421d70fd4b4f24 /src/desktop/rule/layerRule/LayerRuleApplicator.cpp
parent42f0a6005b7c502b1486f1f3b4d9883035be3dd8 (diff)
layerrules: add dynamically registered rules for plugins (#13331)
* layerrules: add dynamically registered rules for plugins * be gone * layerrules: add layer tests with waybar * fix: use kitty layers instead of waybar
Diffstat (limited to 'src/desktop/rule/layerRule/LayerRuleApplicator.cpp')
-rw-r--r--src/desktop/rule/layerRule/LayerRuleApplicator.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
index 4237e4f7..fec3a5b2 100644
--- a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
+++ b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
@@ -4,6 +4,7 @@
#include "../../view/LayerSurface.hpp"
#include "../../types/OverridableVar.hpp"
#include "../../../helpers/MiscFunctions.hpp"
+#include "../../../event/EventBus.hpp"
using namespace Desktop;
using namespace Desktop::Rule;
@@ -32,11 +33,38 @@ void CLayerRuleApplicator::resetProps(std::underlying_type_t<eRuleProperty> prop
UNSET(aboveLock)
UNSET(ignoreAlpha)
UNSET(animationStyle)
+
+#undef UNSET
+
+ if (prio == Types::PRIORITY_WINDOW_RULE)
+ std::erase_if(m_otherProps.props, [props](const auto& el) { return !el.second || el.second->propMask & props; });
}
void CLayerRuleApplicator::applyDynamicRule(const SP<CLayerRule>& rule) {
for (const auto& [key, effect] : rule->effects()) {
switch (key) {
+ default: {
+ if (key <= LAYER_RULE_EFFECT_LAST_STATIC) {
+ Log::logger->log(Log::TRACE, "CLayerRuleApplicator::applyDynamicRule: Skipping effect {}, not dynamic", sc<std::underlying_type_t<eLayerRuleEffect>>(key));
+ break;
+ }
+
+ // custom type, add to our vec
+ if (!m_otherProps.props.contains(key)) {
+ m_otherProps.props.emplace(key,
+ makeUnique<SCustomPropContainer>(SCustomPropContainer{
+ .idx = key,
+ .propMask = rule->getPropertiesMask(),
+ .effect = effect,
+ }));
+ } else {
+ auto& e = m_otherProps.props[key];
+ e->propMask |= rule->getPropertiesMask();
+ e->effect = effect;
+ }
+
+ break;
+ }
case LAYER_RULE_EFFECT_NONE: {
Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: BUG THIS: LAYER_RULE_EFFECT_NONE??");
break;
@@ -125,4 +153,7 @@ void CLayerRuleApplicator::propertiesChanged(std::underlying_type_t<eRulePropert
applyDynamicRule(wr);
}
+
+ // for plugins
+ Event::bus()->m_events.layer.updateRules.emit(m_ls.lock());
}