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_paths(new UserPaths(this)) {
setSparse(true);
setupFileBackend(filePath);
syncFromGlobal(fallback);
if (!filePath.isEmpty())
setupFileBackend(filePath);
if (fallback)
syncFromGlobal(fallback);
}
GlobalConfig::~GlobalConfig() {
// Clear global instance
s_instance = nullptr;
if (m_defaults)
m_defaults->deleteLater();
if (s_instance == this)
s_instance = nullptr;
}
GlobalConfig* GlobalConfig::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() {
if (m_tokensBound)
return;

View file

@ -47,6 +47,7 @@ class GlobalConfig : public ConfigObject {
public:
static GlobalConfig* instance();
[[nodiscard]] Q_INVOKABLE GlobalConfig* defaults();
static GlobalConfig* create(QQmlEngine*, QJSEngine*);
Q_INVOKABLE void save();
@ -59,8 +60,9 @@ public:
private:
friend class MonitorConfigManager;
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;
};

View file

@ -55,18 +55,29 @@ TokenConfig::TokenConfig(TokenConfig* fallback, const QString& filePath, QObject
, m_winfo(new WInfoTokens(this))
, m_controlCenter(new ControlCenterTokens(this)) {
setSparse(true);
setupFileBackend(filePath);
syncFromGlobal(fallback);
if (!filePath.isEmpty())
setupFileBackend(filePath);
if (fallback)
syncFromGlobal(fallback);
}
TokenConfig::~TokenConfig() {
s_instance = nullptr;
if (m_defaults)
m_defaults->deleteLater();
if (s_instance == this)
s_instance = nullptr;
}
TokenConfig* TokenConfig::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*) {
return new TokenConfig(engine);
}

View file

@ -309,6 +309,7 @@ class TokenConfig : public ConfigObject {
public:
static TokenConfig* instance();
[[nodiscard]] Q_INVOKABLE TokenConfig* defaults();
static TokenConfig* create(QQmlEngine*, QJSEngine*);
Q_INVOKABLE void save();
@ -319,7 +320,9 @@ public:
private:
friend class MonitorConfigManager;
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 {