feat: expose default configs to qml

This commit is contained in:
2 * r + 2 * t 2026-04-11 18:58:45 +10:00
parent 08cc492698
commit a53aff357a
4 changed files with 35 additions and 9 deletions

View file

@ -66,19 +66,29 @@ GlobalConfig::GlobalConfig(GlobalConfig* fallback, const QString& filePath, QObj
, m_services(new ServiceConfig(this)) , m_services(new ServiceConfig(this))
, m_paths(new UserPaths(this)) { , m_paths(new UserPaths(this)) {
setSparse(true); setSparse(true);
setupFileBackend(filePath); if (!filePath.isEmpty())
syncFromGlobal(fallback); setupFileBackend(filePath);
if (fallback)
syncFromGlobal(fallback);
} }
GlobalConfig::~GlobalConfig() { GlobalConfig::~GlobalConfig() {
// Clear global instance if (m_defaults)
s_instance = nullptr; m_defaults->deleteLater();
if (s_instance == this)
s_instance = nullptr;
} }
GlobalConfig* GlobalConfig::instance() { GlobalConfig* GlobalConfig::instance() {
return s_instance; return s_instance;
} }
GlobalConfig* GlobalConfig::defaults() {
if (!m_defaults)
m_defaults = new GlobalConfig(nullptr, QString()); // Non-singleton constructor
return m_defaults;
}
void GlobalConfig::bindAppearanceTokens() { void GlobalConfig::bindAppearanceTokens() {
if (m_tokensBound) if (m_tokensBound)
return; return;

View file

@ -47,6 +47,7 @@ class GlobalConfig : public ConfigObject {
public: public:
static GlobalConfig* instance(); static GlobalConfig* instance();
[[nodiscard]] Q_INVOKABLE GlobalConfig* defaults();
static GlobalConfig* create(QQmlEngine*, QJSEngine*); static GlobalConfig* create(QQmlEngine*, QJSEngine*);
Q_INVOKABLE void save(); Q_INVOKABLE void save();
@ -59,8 +60,9 @@ public:
private: private:
friend class MonitorConfigManager; friend class MonitorConfigManager;
explicit GlobalConfig(QObject* parent = nullptr); explicit GlobalConfig(QObject* parent = nullptr);
explicit GlobalConfig(GlobalConfig* fallback, const QString& filePath, QObject* parent); explicit GlobalConfig(GlobalConfig* fallback, const QString& filePath, QObject* parent = nullptr);
GlobalConfig* m_defaults = nullptr;
bool m_tokensBound = false; bool m_tokensBound = false;
}; };

View file

@ -55,18 +55,29 @@ TokenConfig::TokenConfig(TokenConfig* fallback, const QString& filePath, QObject
, m_winfo(new WInfoTokens(this)) , m_winfo(new WInfoTokens(this))
, m_controlCenter(new ControlCenterTokens(this)) { , m_controlCenter(new ControlCenterTokens(this)) {
setSparse(true); setSparse(true);
setupFileBackend(filePath); if (!filePath.isEmpty())
syncFromGlobal(fallback); setupFileBackend(filePath);
if (fallback)
syncFromGlobal(fallback);
} }
TokenConfig::~TokenConfig() { TokenConfig::~TokenConfig() {
s_instance = nullptr; if (m_defaults)
m_defaults->deleteLater();
if (s_instance == this)
s_instance = nullptr;
} }
TokenConfig* TokenConfig::instance() { TokenConfig* TokenConfig::instance() {
return s_instance; return s_instance;
} }
TokenConfig* TokenConfig::defaults() {
if (!m_defaults)
m_defaults = new TokenConfig(nullptr, QString()); // Non-singleton constructor
return m_defaults;
}
TokenConfig* TokenConfig::create(QQmlEngine* engine, QJSEngine*) { TokenConfig* TokenConfig::create(QQmlEngine* engine, QJSEngine*) {
return new TokenConfig(engine); return new TokenConfig(engine);
} }

View file

@ -309,6 +309,7 @@ class TokenConfig : public ConfigObject {
public: public:
static TokenConfig* instance(); static TokenConfig* instance();
[[nodiscard]] Q_INVOKABLE TokenConfig* defaults();
static TokenConfig* create(QQmlEngine*, QJSEngine*); static TokenConfig* create(QQmlEngine*, QJSEngine*);
Q_INVOKABLE void save(); Q_INVOKABLE void save();
@ -319,7 +320,9 @@ public:
private: private:
friend class MonitorConfigManager; friend class MonitorConfigManager;
explicit TokenConfig(QObject* parent = nullptr); explicit TokenConfig(QObject* parent = nullptr);
explicit TokenConfig(TokenConfig* fallback, const QString& filePath, QObject* parent); explicit TokenConfig(TokenConfig* fallback, const QString& filePath, QObject* parent = nullptr);
TokenConfig* m_defaults = nullptr;
}; };
class Tokens : public QObject { class Tokens : public QObject {