From 299da013325be20ff731b91e7ead47b20242b1cd Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 6 Jul 2018 09:11:05 +0200 Subject: [PATCH] QmlDesigner: Fix crash when opening qmlproject while Design mode is open Fix the order of signal handling, which was changed in a5935cb27a0609764586302bf109796d74060f3d but leads to this crash. The connection to the DesignMode instance still needs to be delayed to after it has been created in Core plugin's extensionsInitialized, so do the final initialization as a reaction to ICore::coreAboutToOpen. Task-number: QTCREATORBUG-20495 Change-Id: I92d9a4ff689d2f191d2fd368966ca582bf8af2f7 Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/qmldesignerplugin.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index c5710957da1..1aadaa081ae 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -198,15 +198,15 @@ bool QmlDesignerPlugin::delayedInitialize() d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool); d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool); - connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated, - &d->shortCutManager, &ShortCutManager::updateActions); - return true; } void QmlDesignerPlugin::extensionsInitialized() { - integrateIntoQtCreator(&d->mainWidget); + // delay after Core plugin's extensionsInitialized, so the DesignMode is availabe + connect(Core::ICore::instance(), &Core::ICore::coreAboutToOpen, this, [this] { + integrateIntoQtCreator(&d->mainWidget); + }); } static QStringList allUiQmlFilesforCurrentProject(const Utils::FileName &fileName) @@ -255,6 +255,9 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget) Core::DesignMode::registerDesignWidget(modeWidget, mimeTypes, d->context->context()); + connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated, + &d->shortCutManager, &ShortCutManager::updateActions); + connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, [this] (Core::IEditor *editor) { if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode()) changeEditor();