QmlDesigner: Fix crash when opening qmlproject while Design mode is open

Fix the order of signal handling, which was changed in
a5935cb27a
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 <thomas.hartmann@qt.io>
This commit is contained in:
Eike Ziller
2018-07-06 09:11:05 +02:00
parent cb572773c0
commit 299da01332

View File

@@ -198,15 +198,15 @@ bool QmlDesignerPlugin::delayedInitialize()
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool); d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool); d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::PathTool);
connect(Core::DesignMode::instance(), &Core::DesignMode::actionsUpdated,
&d->shortCutManager, &ShortCutManager::updateActions);
return true; return true;
} }
void QmlDesignerPlugin::extensionsInitialized() 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) static QStringList allUiQmlFilesforCurrentProject(const Utils::FileName &fileName)
@@ -255,6 +255,9 @@ void QmlDesignerPlugin::integrateIntoQtCreator(QWidget *modeWidget)
Core::DesignMode::registerDesignWidget(modeWidget, mimeTypes, d->context->context()); 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) { connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, [this] (Core::IEditor *editor) {
if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode()) if (d && checkIfEditorIsQtQuick(editor) && isInDesignerMode())
changeEditor(); changeEditor();