diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 23572260ccc4f089838ab6c1acb08a71f2544fec..aac8c2cb0d9262361aedb4f62fc94a03698fb0b5 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -123,7 +123,7 @@ DesignModeWidget::DesignModeWidget(QWidget *parent) : m_mainSplitter(0), m_leftSideBar(0), m_rightSideBar(0), - m_setup(false), + m_initStatus(NotInitialized), m_warningWidget(0) { m_undoAction = new QAction(tr("&Undo"), this); @@ -148,8 +148,17 @@ DesignModeWidget::~DesignModeWidget() void DesignModeWidget::showEditor(Core::IEditor *editor) { - show(); - setup(); + // + // Prevent recursive calls to function by explicitly managing initialization status + // (QApplication::processEvents is called explicitly at a number of places) + // + if (m_initStatus == Initializing) + return; + + if (m_initStatus == NotInitialized) { + m_initStatus = Initializing; + setup(); + } QString fileName; QPlainTextEdit *textEdit = 0; @@ -193,6 +202,8 @@ void DesignModeWidget::showEditor(Core::IEditor *editor) } } setCurrentDocument(document); + + m_initStatus = Initialized; } void DesignModeWidget::closeEditors(QList<Core::IEditor*> editors) @@ -477,10 +488,6 @@ void DesignModeWidget::setCurrentDocument(DesignDocumentController *newDesignDoc void DesignModeWidget::setup() { - if (m_setup) - return; - m_setup = true; - QList<Core::INavigationWidgetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Core::INavigationWidgetFactory>(); QWidget *openDocumentsWidget = 0; diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h index 934ec7b08ea33ea22eebe20795057d2a09e366df..54bfeccdc717e26ab657bd24ad4b0971d60278fb 100644 --- a/src/plugins/qmldesigner/designmodewidget.h +++ b/src/plugins/qmldesigner/designmodewidget.h @@ -179,7 +179,10 @@ private: Core::EditorToolBar *m_fakeToolBar; bool m_isDisabled; - bool m_setup; + + enum InitializeStatus { NotInitialized, Initializing, Initialized }; + InitializeStatus m_initStatus; + DocumentWarningWidget *m_warningWidget; };