From 5cef79d5e046d8b27c998cf438bbe37bba180121 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 12 Apr 2026 23:50:46 +1000 Subject: [PATCH] feat: warn on per monitor confs being accessed without scope --- .../src/Caelestia/Config/configattached.cpp | 3 ++ .../src/Caelestia/Config/tokensattached.cpp | 41 ++++++++----------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/plugin/src/Caelestia/Config/configattached.cpp b/plugin/src/Caelestia/Config/configattached.cpp index 55694c32..cc6ae8f9 100644 --- a/plugin/src/Caelestia/Config/configattached.cpp +++ b/plugin/src/Caelestia/Config/configattached.cpp @@ -26,6 +26,9 @@ void Config::connectScope() { const Type* Config::name() const { \ if (m_scope && m_scope->config()) \ 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(); \ } diff --git a/plugin/src/Caelestia/Config/tokensattached.cpp b/plugin/src/Caelestia/Config/tokensattached.cpp index 1dd159d7..cf4acdb4 100644 --- a/plugin/src/Caelestia/Config/tokensattached.cpp +++ b/plugin/src/Caelestia/Config/tokensattached.cpp @@ -9,9 +9,12 @@ namespace caelestia::config { namespace { -const AppearanceConfig* resolveAppearance(ConfigScope* scope) { +const AppearanceConfig* resolveAppearance(ConfigScope* scope, const char* prop, QObject* parent) { if (scope && scope->config()) 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(); } @@ -36,34 +39,26 @@ void Tokens::bindAnim() { m_anim->bindCurves(TokenConfig::instance()->appearance()->curves()); } -const AppearanceRounding* Tokens::rounding() const { - auto* a = resolveAppearance(m_scope); - return a ? a->rounding() : nullptr; -} +#define TOKENS_ATTACHED_GETTER(Type, name) \ + const Type* Tokens::name() const { \ + auto* a = resolveAppearance(m_scope, #name, parent()); \ + return a ? a->name() : nullptr; \ + } -const AppearanceSpacing* Tokens::spacing() const { - auto* a = resolveAppearance(m_scope); - return a ? a->spacing() : nullptr; -} +TOKENS_ATTACHED_GETTER(AppearanceRounding, rounding) +TOKENS_ATTACHED_GETTER(AppearanceSpacing, spacing) +TOKENS_ATTACHED_GETTER(AppearancePadding, padding) +TOKENS_ATTACHED_GETTER(AppearanceFont, font) +TOKENS_ATTACHED_GETTER(AppearanceTransparency, transparency) -const AppearancePadding* Tokens::padding() const { - 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; -} +#undef TOKENS_ATTACHED_GETTER const SizeTokens* Tokens::sizes() const { if (m_scope && m_scope->tokens()) 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(); }