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;
 };