summaryrefslogtreecommitdiff
path: root/src/manager-lib/qmlinprocessruntime.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/manager-lib/qmlinprocessruntime.cpp')
-rw-r--r--src/manager-lib/qmlinprocessruntime.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/manager-lib/qmlinprocessruntime.cpp b/src/manager-lib/qmlinprocessruntime.cpp
index f3ac72d4..cd5e8987 100644
--- a/src/manager-lib/qmlinprocessruntime.cpp
+++ b/src/manager-lib/qmlinprocessruntime.cpp
@@ -131,7 +131,6 @@ bool QmlInProcessRuntime::start()
qCDebug(LogSystem) << "Updated Qml import paths:" << m_inProcessQmlEngine->importPathList();
}
- m_componentError = false;
QQmlComponent *component = new QQmlComponent(m_inProcessQmlEngine, m_app->nonAliasedInfo()->absoluteCodeFilePath());
if (!component->isReady()) {
@@ -143,7 +142,7 @@ bool QmlInProcessRuntime::start()
// We are running each application in it's own, separate Qml context.
// This way, we can export an unique ApplicationInterface object for each app
- QQmlContext *appContext = new QQmlContext(m_inProcessQmlEngine->rootContext());
+ QQmlContext *appContext = new QQmlContext(m_inProcessQmlEngine->rootContext(), this);
m_applicationIf = new QmlInProcessApplicationInterface(this);
appContext->setContextProperty(qSL("ApplicationInterface"), m_applicationIf);
connect(m_applicationIf, &QmlInProcessApplicationInterface::quitAcknowledged,
@@ -154,16 +153,17 @@ bool QmlInProcessRuntime::start()
QObject *obj = component->beginCreate(appContext);
- QMetaObject::invokeMethod(this, [component, appContext, obj, this]() {
+ QMetaObject::invokeMethod(this, [component, obj, this]() {
component->completeCreate();
- if (!obj || m_componentError) {
+ delete component;
+ if (!obj) {
qCCritical(LogSystem) << "could not load" << m_app->nonAliasedInfo()->absoluteCodeFilePath() << ": no root object";
- delete obj;
- delete appContext;
- delete m_applicationIf;
- m_applicationIf = nullptr;
finish(3, Am::NormalExit);
} else {
+ if (state() == Am::ShuttingDown) {
+ delete obj;
+ return;
+ }
#if !defined(AM_HEADLESS)
if (!qobject_cast<QmlInProcessApplicationManagerWindow*>(obj)) {
QQuickItem *item = qobject_cast<QQuickItem*>(obj);
@@ -179,7 +179,6 @@ bool QmlInProcessRuntime::start()
openDocument(m_document, QString());
setState(Am::Running);
}
- delete component;
}, Qt::QueuedConnection);
return true;
}