From 4ff97c8306c5289a547cf4446410fb37f4d32192 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 11 Apr 2026 03:27:19 +1000 Subject: [PATCH] fix: crash/block on qml engine reload --- plugin/src/Caelestia/Config/config.cpp | 21 ++++++++++++++++----- plugin/src/Caelestia/Config/config.hpp | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/plugin/src/Caelestia/Config/config.cpp b/plugin/src/Caelestia/Config/config.cpp index dfee35f4..c242a1d2 100644 --- a/plugin/src/Caelestia/Config/config.cpp +++ b/plugin/src/Caelestia/Config/config.cpp @@ -1,11 +1,14 @@ #include "config.hpp" +#include #include namespace caelestia::config { namespace { +GlobalConfig* s_instance = nullptr; + QString configDir() { return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QStringLiteral("/caelestia/"); } @@ -32,6 +35,9 @@ GlobalConfig::GlobalConfig(QObject* parent) , m_services(new ServiceConfig(this)) , m_paths(new UserPaths(this)) , m_advanced(new AdvancedConfig(this)) { + // Set global instance + s_instance = this; + // Bind token base values from advanced config to appearance computed properties auto* adv = m_advanced->appearance(); m_appearance->rounding()->bindTokens(adv->rounding()); @@ -45,13 +51,18 @@ GlobalConfig::GlobalConfig(QObject* parent) m_advanced->setupFileBackend(configDir() + QStringLiteral("advanced.json")); } -GlobalConfig* GlobalConfig::instance() { - static GlobalConfig instance; - return &instance; +GlobalConfig::~GlobalConfig() { + // Clear global instance + s_instance = nullptr; } -GlobalConfig* GlobalConfig::create(QQmlEngine*, QJSEngine*) { - return instance(); +GlobalConfig* GlobalConfig::instance() { + return s_instance; +} + +GlobalConfig* GlobalConfig::create(QQmlEngine* engine, QJSEngine*) { + auto* config = new GlobalConfig(engine); + return config; } void GlobalConfig::save() { diff --git a/plugin/src/Caelestia/Config/config.hpp b/plugin/src/Caelestia/Config/config.hpp index fda17721..bf23df7b 100644 --- a/plugin/src/Caelestia/Config/config.hpp +++ b/plugin/src/Caelestia/Config/config.hpp @@ -58,6 +58,8 @@ public: Q_INVOKABLE void save(); Q_INVOKABLE void reload(); + ~GlobalConfig() override; + private: explicit GlobalConfig(QObject* parent = nullptr);