fix: create tokens singleton when global config is created
GlobalConfig depends on TokenConfig to forward properties
This commit is contained in:
parent
9a8c5ec7f9
commit
f15b234753
4 changed files with 39 additions and 11 deletions
|
|
@ -1,5 +1,6 @@
|
|||
#include "config.hpp"
|
||||
#include "configscope.hpp"
|
||||
#include "tokens.hpp"
|
||||
|
||||
#include <qqmlengine.h>
|
||||
#include <qstandardpaths.h>
|
||||
|
|
@ -39,6 +40,10 @@ GlobalConfig::GlobalConfig(QObject* parent)
|
|||
s_instance = this;
|
||||
|
||||
setupFileBackend(configDir() + QStringLiteral("shell.json"));
|
||||
|
||||
// If TokenConfig was created before us, bind now
|
||||
if (TokenConfig::instance())
|
||||
bindAppearanceTokens();
|
||||
}
|
||||
|
||||
GlobalConfig::GlobalConfig(GlobalConfig* fallback, const QString& filePath, QObject* parent)
|
||||
|
|
@ -74,8 +79,32 @@ GlobalConfig* GlobalConfig::instance() {
|
|||
return s_instance;
|
||||
}
|
||||
|
||||
GlobalConfig* GlobalConfig::create(QQmlEngine* engine, QJSEngine*) {
|
||||
void GlobalConfig::bindAppearanceTokens() {
|
||||
auto* tokens = TokenConfig::instance();
|
||||
if (!tokens) {
|
||||
qCDebug(lcConfig) << "GlobalConfig::bindAppearanceTokens: TokenConfig not yet available";
|
||||
return;
|
||||
}
|
||||
|
||||
qCDebug(lcConfig) << "GlobalConfig::bindAppearanceTokens: binding appearance to token values";
|
||||
auto* tokenAppearance = tokens->appearance();
|
||||
m_appearance->rounding()->bindTokens(tokenAppearance->rounding());
|
||||
m_appearance->spacing()->bindTokens(tokenAppearance->spacing());
|
||||
m_appearance->padding()->bindTokens(tokenAppearance->padding());
|
||||
m_appearance->font()->size()->bindTokens(tokenAppearance->fontSize());
|
||||
m_appearance->anim()->durations()->bindTokens(tokenAppearance->animDurations());
|
||||
}
|
||||
|
||||
GlobalConfig* GlobalConfig::create(QQmlEngine* engine, QJSEngine* jsEngine) {
|
||||
auto* config = new GlobalConfig(engine);
|
||||
|
||||
// Ensure TokenConfig is created — appearance computed properties depend on token binding.
|
||||
if (!TokenConfig::instance())
|
||||
TokenConfig::create(engine, jsEngine);
|
||||
|
||||
// Bind now that both singletons exist
|
||||
config->bindAppearanceTokens();
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,8 @@ public:
|
|||
|
||||
~GlobalConfig() override;
|
||||
|
||||
void bindAppearanceTokens();
|
||||
|
||||
private:
|
||||
friend class MonitorConfigManager;
|
||||
explicit GlobalConfig(QObject* parent = nullptr);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <qfilesystemwatcher.h>
|
||||
#include <qjsonobject.h>
|
||||
#include <qloggingcategory.h>
|
||||
#include <qmap.h>
|
||||
#include <qobject.h>
|
||||
#include <qqmlintegration.h>
|
||||
|
|
@ -42,6 +43,8 @@ private:
|
|||
|
||||
namespace caelestia::config {
|
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcConfig)
|
||||
|
||||
class ConfigObject : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
|
|
|
|||
|
|
@ -33,17 +33,11 @@ TokenConfig::TokenConfig(QObject* parent)
|
|||
, m_controlCenter(new ControlCenterTokens(this)) {
|
||||
s_instance = this;
|
||||
|
||||
// Bind token base values to GlobalConfig appearance computed properties
|
||||
if (auto* global = GlobalConfig::instance()) {
|
||||
auto* appearanceConfig = global->appearance();
|
||||
appearanceConfig->rounding()->bindTokens(m_appearance->rounding());
|
||||
appearanceConfig->spacing()->bindTokens(m_appearance->spacing());
|
||||
appearanceConfig->padding()->bindTokens(m_appearance->padding());
|
||||
appearanceConfig->font()->size()->bindTokens(m_appearance->fontSize());
|
||||
appearanceConfig->anim()->durations()->bindTokens(m_appearance->animDurations());
|
||||
}
|
||||
|
||||
setupFileBackend(configDir() + QStringLiteral("shell-tokens.json"));
|
||||
|
||||
// If GlobalConfig was created before us, trigger its binding
|
||||
if (auto* global = GlobalConfig::instance())
|
||||
global->bindAppearanceTokens();
|
||||
}
|
||||
|
||||
TokenConfig::TokenConfig(TokenConfig* fallback, const QString& filePath, QObject* parent)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue