diff options
Diffstat (limited to 'src/manager-lib/qmlinprocessruntime.cpp')
-rw-r--r-- | src/manager-lib/qmlinprocessruntime.cpp | 17 |
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; } |