From 6956eb1d84b97fcd21d9af718ca92f0b92945255 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 29 Jan 2013 09:50:31 +0100 Subject: [PATCH] QmlDesigner: crash fix The subcomponent manager populates the item library. This means the ItemLibraryView has to be properly initialized before we call m_subComponentManager->update(). I added a helper function and call it from activateAutoSynchronization(), after all views have been attached. Change-Id: Ie802f93c7d0a76b42160d4a92e8448e900380b71 Reviewed-by: Thomas Hartmann --- .../components/integration/designdocument.cpp | 12 ++++++++++-- .../components/integration/designdocument.h | 1 + src/plugins/qmldesigner/qmldesignerplugin.cpp | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index dc19e635320..1f43db90f62 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -392,7 +392,6 @@ void DesignDocument::activateCurrentModel(TextModifier *textModifier) // m_formEditorView->crumblePath()->pushElement(simplfiedDisplayName(), createCrumbleBarInfo()); m_documentLoaded = true; - m_subComponentManager->update(QUrl::fromLocalFile(fileName()), m_currentModel->imports()); Q_ASSERT(m_documentModel); QApplication::restoreOverrideCursor(); } @@ -407,6 +406,7 @@ void DesignDocument::activateCurrentModel() void DesignDocument::activateDocumentModel() { + //this function seems to be unused! QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); Q_ASSERT(m_documentModel); @@ -417,7 +417,9 @@ void DesignDocument::activateDocumentModel() m_currentModel = m_documentModel; m_documentLoaded = true; - m_subComponentManager->update(QUrl::fromLocalFile(fileName()), m_currentModel->imports()); + + updateSubcomponentManager(); + Q_ASSERT(m_documentModel); QApplication::restoreOverrideCursor(); } @@ -443,6 +445,12 @@ void DesignDocument::close() emit designDocumentClosed(); } +void DesignDocument::updateSubcomponentManager() +{ + Q_ASSERT(m_subComponentManager); + m_subComponentManager->update(QUrl::fromLocalFile(fileName()), m_currentModel->imports()); +} + void DesignDocument::deleteSelected() { if (!m_currentModel) diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index bf89161c36d..7a738945ad7 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -82,6 +82,7 @@ public: void activateCurrentModel(); void activateDocumentModel(); void close(); + void updateSubcomponentManager(); bool isUndoAvailable() const; bool isRedoAvailable() const; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index abd3d9c67d1..8468ce3db81 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -302,6 +302,7 @@ void QmlDesignerPlugin::activateAutoSynchronization() m_mainWidget->showErrorMessage(errors); } + currentDesignDocument()->updateSubcomponentManager(); connect(currentDesignDocument()->rewriterView(), SIGNAL(errorsChanged(QList)),