From 8110c887819df7615023ff8cf8a51be403cf3c0e Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Wed, 11 Aug 2010 14:59:04 +0200 Subject: [PATCH] Fix crash on close in sidebar/bookmarks view Explicitly close all views of the sidebar _before_ the core is destructed. E.g. the bookmarks view tries to access the core in it's destructor. --- src/plugins/coreplugin/mainwindow.cpp | 7 ++++--- src/plugins/coreplugin/navigationwidget.cpp | 9 +++++++++ src/plugins/coreplugin/navigationwidget.h | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) 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); -- GitLab