diff --git a/src/plugins/coreplugin/sidebar.cpp b/src/plugins/coreplugin/sidebar.cpp index a72f637e1d4f245adcbc8e4322457a346228b407..7e580484b4736a447263b32ca92bae7fad03a357 100644 --- a/src/plugins/coreplugin/sidebar.cpp +++ b/src/plugins/coreplugin/sidebar.cpp @@ -107,6 +107,14 @@ SideBarWidget *SideBar::insertSideBarWidget(int position, const QString &title) return item; } +void SideBar::removeSideBarWidget(SideBarWidget *widget) +{ + widget->removeCurrentItem(); + m_widgets.removeOne(widget); + widget->hide(); + widget->deleteLater(); +} + void SideBar::split() { SideBarWidget *original = qobject_cast<SideBarWidget*>(sender()); @@ -121,10 +129,7 @@ void SideBar::close() SideBarWidget *widget = qobject_cast<SideBarWidget*>(sender()); if (!widget) return; - widget->removeCurrentItem(); - m_widgets.removeOne(widget); - widget->hide(); - widget->deleteLater(); + removeSideBarWidget(widget); updateWidgets(); } } @@ -148,6 +153,9 @@ void SideBar::saveSettings(QSettings *settings) void SideBar::readSettings(QSettings *settings) { + foreach (SideBarWidget *widget, m_widgets) + removeSideBarWidget(widget); + if (settings->contains("HelpSideBar/Views")) { QStringList views = settings->value("HelpSideBar/Views").toStringList(); if (views.count()) { diff --git a/src/plugins/coreplugin/sidebar.h b/src/plugins/coreplugin/sidebar.h index 0a023be100f12d68d423a20e16b7777df2419842..bd6f1e1c260d9325c0f9671524ebd784d8c9f491 100644 --- a/src/plugins/coreplugin/sidebar.h +++ b/src/plugins/coreplugin/sidebar.h @@ -31,6 +31,7 @@ #define SIDEBAR_H #include <QtCore/QMap> +#include <QtCore/QPointer> #include <QtGui/QWidget> #include <QtGui/QComboBox> @@ -117,6 +118,8 @@ private slots: private: Internal::SideBarWidget *insertSideBarWidget(int position, const QString &title = QString()); + void removeSideBarWidget(Internal::SideBarWidget *widget); + QList<Internal::SideBarWidget*> m_widgets; QMap<QString, SideBarItem*> m_itemMap;