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 "config.hpp"
|
||||||
#include "configscope.hpp"
|
#include "configscope.hpp"
|
||||||
|
#include "tokens.hpp"
|
||||||
|
|
||||||
#include <qqmlengine.h>
|
#include <qqmlengine.h>
|
||||||
#include <qstandardpaths.h>
|
#include <qstandardpaths.h>
|
||||||
|
|
@ -39,6 +40,10 @@ GlobalConfig::GlobalConfig(QObject* parent)
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
|
|
||||||
setupFileBackend(configDir() + QStringLiteral("shell.json"));
|
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)
|
GlobalConfig::GlobalConfig(GlobalConfig* fallback, const QString& filePath, QObject* parent)
|
||||||
|
|
@ -74,8 +79,32 @@ GlobalConfig* GlobalConfig::instance() {
|
||||||
return s_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);
|
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;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,8 @@ public:
|
||||||
|
|
||||||
~GlobalConfig() override;
|
~GlobalConfig() override;
|
||||||
|
|
||||||
|
void bindAppearanceTokens();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class MonitorConfigManager;
|
friend class MonitorConfigManager;
|
||||||
explicit GlobalConfig(QObject* parent = nullptr);
|
explicit GlobalConfig(QObject* parent = nullptr);
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <qfilesystemwatcher.h>
|
#include <qfilesystemwatcher.h>
|
||||||
#include <qjsonobject.h>
|
#include <qjsonobject.h>
|
||||||
|
#include <qloggingcategory.h>
|
||||||
#include <qmap.h>
|
#include <qmap.h>
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <qqmlintegration.h>
|
#include <qqmlintegration.h>
|
||||||
|
|
@ -42,6 +43,8 @@ private:
|
||||||
|
|
||||||
namespace caelestia::config {
|
namespace caelestia::config {
|
||||||
|
|
||||||
|
Q_DECLARE_LOGGING_CATEGORY(lcConfig)
|
||||||
|
|
||||||
class ConfigObject : public QObject {
|
class ConfigObject : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,17 +33,11 @@ TokenConfig::TokenConfig(QObject* parent)
|
||||||
, m_controlCenter(new ControlCenterTokens(this)) {
|
, m_controlCenter(new ControlCenterTokens(this)) {
|
||||||
s_instance = 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"));
|
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)
|
TokenConfig::TokenConfig(TokenConfig* fallback, const QString& filePath, QObject* parent)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue