diff --git a/src/core/generation.cpp b/src/core/generation.cpp index c4eb358b..adb2a09c 100644 --- a/src/core/generation.cpp +++ b/src/core/generation.cpp @@ -124,7 +124,10 @@ void EngineGeneration::onReload(EngineGeneration* old) { QObject::connect(this->engine, &QQmlEngine::quit, this, &EngineGeneration::quit); QObject::connect(this->engine, &QQmlEngine::exit, this, &EngineGeneration::exit); - this->root->reload(old == nullptr ? nullptr : old->root); + if (auto* reloadable = qobject_cast(this->root)) { + reloadable->reload(old ? old->root : nullptr); + } + this->singletonRegistry.onReload(old == nullptr ? nullptr : &old->singletonRegistry); this->reloadComplete = true; emit this->reloadFinished(); diff --git a/src/core/generation.hpp b/src/core/generation.hpp index 2d842829..e1cae091 100644 --- a/src/core/generation.hpp +++ b/src/core/generation.hpp @@ -13,7 +13,6 @@ #include "incubator.hpp" #include "qsintercept.hpp" #include "scan.hpp" -#include "shell.hpp" #include "singleton.hpp" class RootWrapper; @@ -58,7 +57,7 @@ public: QsUrlInterceptor urlInterceptor; QsInterceptNetworkAccessManagerFactory interceptNetFactory; QQmlEngine* engine = nullptr; - ShellRoot* root = nullptr; + QObject* root = nullptr; SingletonRegistry singletonRegistry; QFileSystemWatcher* watcher = nullptr; QVector deletedWatchedFiles; diff --git a/src/core/rootwrapper.cpp b/src/core/rootwrapper.cpp index 0365b523..76b3d3ce 100644 --- a/src/core/rootwrapper.cpp +++ b/src/core/rootwrapper.cpp @@ -14,7 +14,6 @@ #include "generation.hpp" #include "qmlglobal.hpp" #include "scan.hpp" -#include "shell.hpp" RootWrapper::RootWrapper(QString rootPath, QString shellId) : QObject(nullptr) @@ -60,9 +59,9 @@ void RootWrapper::reloadGraph(bool hard) { url.setScheme("qsintercept"); auto component = QQmlComponent(generation->engine, url); - auto* obj = component.beginCreate(generation->engine->rootContext()); + auto* newRoot = component.beginCreate(generation->engine->rootContext()); - if (obj == nullptr) { + if (newRoot == nullptr) { const QString error = "failed to create root component\n" + component.errorString(); qWarning().noquote() << error; generation->destroy(); @@ -74,20 +73,6 @@ void RootWrapper::reloadGraph(bool hard) { return; } - auto* newRoot = qobject_cast(obj); - if (newRoot == nullptr) { - const QString error = "root component was not a Quickshell.ShellRoot"; - qWarning().noquote() << error; - delete obj; - generation->destroy(); - - if (this->generation != nullptr && this->generation->qsgInstance != nullptr) { - emit this->generation->qsgInstance->reloadFailed(error); - } - - return; - } - generation->root = newRoot; component.completeCreate();