From 0624fb56083ba872191dc7f67aae771efce0aeb1 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Tue, 11 Aug 2009 11:58:19 +0200
Subject: [PATCH] Be more robust wrt restoring settings.

Make sure that we give the QMainWindow always a valid layout before
restoring settings, so if something goes wrong with that, we don't end
up with a broken layout.
---
 src/plugins/designer/editorwidget.cpp | 19 +++++++++++++++----
 src/plugins/designer/editorwidget.h   |  1 +
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/plugins/designer/editorwidget.cpp b/src/plugins/designer/editorwidget.cpp
index 7a1b60ee3d9..f937bcf181e 100644
--- a/src/plugins/designer/editorwidget.cpp
+++ b/src/plugins/designer/editorwidget.cpp
@@ -80,7 +80,8 @@ SharedSubWindow::~SharedSubWindow()
 QHash<QString, QVariant> EditorWidget::m_globalState = QHash<QString, QVariant>();
 
 EditorWidget::EditorWidget(QWidget *formWindow)
-    : m_mainWindow(new Core::Utils::FancyMainWindow)
+    : m_mainWindow(new Core::Utils::FancyMainWindow),
+    m_initialized(false)
 {
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setMargin(0);
@@ -125,7 +126,6 @@ void EditorWidget::setDefaultLayout()
     }
 
     m_mainWindow->setTrackingEnabled(true);
-    m_globalState = m_mainWindow->saveSettings();
 }
 
 void EditorWidget::activate()
@@ -133,10 +133,21 @@ void EditorWidget::activate()
     for (int i=0; i < DesignerSubWindowCount; i++)
         m_designerSubWindows[i]->activate();
 
+    if (!m_initialized) {
+        // set a default layout, so if something goes wrong with
+        // restoring the settings below, there is a fallback
+        // (otherwise we end up with a broken mainwindow layout)
+        // we can't do it in the constructor, because the sub windows
+        // don't have their widgets yet there
+        setDefaultLayout();
+        m_initialized = true;
+    }
+
     if (!m_globalState.isEmpty())
         m_mainWindow->restoreSettings(m_globalState);
-    else
-        setDefaultLayout();
+    else {
+        m_globalState = m_mainWindow->saveSettings();
+    }
 }
 
 void EditorWidget::hideEvent(QHideEvent *)
diff --git a/src/plugins/designer/editorwidget.h b/src/plugins/designer/editorwidget.h
index ca3965a812d..a18e86166ac 100644
--- a/src/plugins/designer/editorwidget.h
+++ b/src/plugins/designer/editorwidget.h
@@ -93,6 +93,7 @@ private:
     SharedSubWindow* m_designerSubWindows[Designer::Constants::DesignerSubWindowCount];
     QDockWidget *m_designerDockWidgets[Designer::Constants::DesignerSubWindowCount];
     Core::Utils::FancyMainWindow *m_mainWindow;
+    bool m_initialized;
 
     static QHash<QString, QVariant> m_globalState;
 };
-- 
GitLab