diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index eb7a8b98b52..c7338cdb1b5 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -283,9 +283,6 @@ MainWindow::~MainWindow() delete m_rightPaneWidget; m_rightPaneWidget = 0; - delete m_navigationWidget; - m_navigationWidget = 0; - delete m_modeManager; m_modeManager = 0; delete m_mimeDatabase; @@ -366,7 +363,11 @@ void MainWindow::closeEvent(QCloseEvent *event) } emit m_coreImpl->coreAboutToClose(); + writeSettings(); + + m_navigationWidget->closeSubWidgets(); + event->accept(); } diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp index 2e8753f1775..0bfb62aea68 100644 --- a/src/plugins/coreplugin/navigationwidget.cpp +++ b/src/plugins/coreplugin/navigationwidget.cpp @@ -340,6 +340,15 @@ void NavigationWidget::restoreSettings(QSettings *settings) } } +void NavigationWidget::closeSubWidgets() +{ + foreach (NavigationSubWidget *subWidget, m_subWidgets) { + subWidget->saveSettings(); + delete subWidget; + } + m_subWidgets.clear(); +} + void NavigationWidget::setShown(bool b) { if (m_shown == b) diff --git a/src/plugins/coreplugin/navigationwidget.h b/src/plugins/coreplugin/navigationwidget.h index a9ffe2b4298..1c4834aeb0f 100644 --- a/src/plugins/coreplugin/navigationwidget.h +++ b/src/plugins/coreplugin/navigationwidget.h @@ -92,6 +92,8 @@ public: void saveSettings(QSettings *settings); void restoreSettings(QSettings *settings); + void closeSubWidgets(); + bool isShown() const; void setShown(bool b);