feat: warn on per monitor confs being accessed without scope

This commit is contained in:
2 * r + 2 * t 2026-04-12 23:50:46 +10:00
parent 0432c4708e
commit 5cef79d5e0
2 changed files with 21 additions and 23 deletions

View file

@ -26,6 +26,9 @@ void Config::connectScope() {
const Type* Config::name() const { \ const Type* Config::name() const { \
if (m_scope && m_scope->config()) \ if (m_scope && m_scope->config()) \
return m_scope->config()->name(); \ return m_scope->config()->name(); \
if (parent()) \
qCWarning(lcConfig, "Config.%s accessed without a ConfigScope ancestor on %s", #name, \
parent()->metaObject()->className()); \
return GlobalConfig::instance()->name(); \ return GlobalConfig::instance()->name(); \
} }

View file

@ -9,9 +9,12 @@ namespace caelestia::config {
namespace { namespace {
const AppearanceConfig* resolveAppearance(ConfigScope* scope) { const AppearanceConfig* resolveAppearance(ConfigScope* scope, const char* prop, QObject* parent) {
if (scope && scope->config()) if (scope && scope->config())
return scope->config()->appearance(); return scope->config()->appearance();
if (parent)
qCWarning(lcConfig, "Tokens.%s accessed without a ConfigScope ancestor on %s", prop,
parent->metaObject()->className());
return GlobalConfig::instance()->appearance(); return GlobalConfig::instance()->appearance();
} }
@ -36,34 +39,26 @@ void Tokens::bindAnim() {
m_anim->bindCurves(TokenConfig::instance()->appearance()->curves()); m_anim->bindCurves(TokenConfig::instance()->appearance()->curves());
} }
const AppearanceRounding* Tokens::rounding() const { #define TOKENS_ATTACHED_GETTER(Type, name) \
auto* a = resolveAppearance(m_scope); const Type* Tokens::name() const { \
return a ? a->rounding() : nullptr; auto* a = resolveAppearance(m_scope, #name, parent()); \
return a ? a->name() : nullptr; \
} }
const AppearanceSpacing* Tokens::spacing() const { TOKENS_ATTACHED_GETTER(AppearanceRounding, rounding)
auto* a = resolveAppearance(m_scope); TOKENS_ATTACHED_GETTER(AppearanceSpacing, spacing)
return a ? a->spacing() : nullptr; TOKENS_ATTACHED_GETTER(AppearancePadding, padding)
} TOKENS_ATTACHED_GETTER(AppearanceFont, font)
TOKENS_ATTACHED_GETTER(AppearanceTransparency, transparency)
const AppearancePadding* Tokens::padding() const { #undef TOKENS_ATTACHED_GETTER
auto* a = resolveAppearance(m_scope);
return a ? a->padding() : nullptr;
}
const AppearanceFont* Tokens::font() const {
auto* a = resolveAppearance(m_scope);
return a ? a->font() : nullptr;
}
const AppearanceTransparency* Tokens::transparency() const {
auto* a = resolveAppearance(m_scope);
return a ? a->transparency() : nullptr;
}
const SizeTokens* Tokens::sizes() const { const SizeTokens* Tokens::sizes() const {
if (m_scope && m_scope->tokens()) if (m_scope && m_scope->tokens())
return m_scope->tokens()->sizes(); return m_scope->tokens()->sizes();
if (parent())
qCWarning(lcConfig, "Tokens.sizes accessed without a ConfigScope ancestor on %s",
parent()->metaObject()->className());
return TokenConfig::instance()->sizes(); return TokenConfig::instance()->sizes();
} }