diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index eb7a8b98b5218e5ad892fa0020ca17e4364937e6..c7338cdb1b5159bfaf6c943801092052dea28d86 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 2e8753f1775379a9d3a20c36a8d6282f1bb152b5..0bfb62aea684845a509ae45193a3376bf1173311 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 a9ffe2b4298f8b570d9a96c5c363a54a6d362df8..1c4834aeb0fab54004db53b48340ace53d297245 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);