From ee3ad439a892021709b2bd149c5371897b7da10d Mon Sep 17 00:00:00 2001 From: kh1 <qt-info@nokia.com> Date: Wed, 15 Sep 2010 11:02:45 +0200 Subject: [PATCH] Fix memory leak. Task-number: QTCREATORBUG-2335 --- src/plugins/help/openpagesmanager.cpp | 28 +++++++++++++++------------ src/plugins/help/openpagesmanager.h | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/plugins/help/openpagesmanager.cpp b/src/plugins/help/openpagesmanager.cpp index 484d658a00f..98ee8d3c29b 100644 --- a/src/plugins/help/openpagesmanager.cpp +++ b/src/plugins/help/openpagesmanager.cpp @@ -63,16 +63,6 @@ OpenPagesManager::OpenPagesManager(QObject *parent) m_instance = this; m_model = new OpenPagesModel(this); - m_openPagesWidget = new OpenPagesWidget(m_model); - m_openPagesWidget->setFrameStyle(QFrame::NoFrame); - - connect(m_openPagesWidget, SIGNAL(setCurrentPage(QModelIndex)), this, - SLOT(setCurrentPage(QModelIndex))); - connect(m_openPagesWidget, SIGNAL(closePage(QModelIndex)), this, - SLOT(closePage(QModelIndex))); - connect(m_openPagesWidget, SIGNAL(closePagesExcept(QModelIndex)), this, - SLOT(closePagesExcept(QModelIndex))); - m_comboBox = new QComboBox; m_comboBox->setModel(m_model); m_comboBox->setMinimumContentsLength(40); @@ -102,6 +92,16 @@ OpenPagesManager &OpenPagesManager::instance() QWidget *OpenPagesManager::openPagesWidget() const { + if (!m_openPagesWidget) { + m_openPagesWidget = new OpenPagesWidget(m_model); + m_openPagesWidget->setFrameStyle(QFrame::NoFrame); + connect(m_openPagesWidget, SIGNAL(setCurrentPage(QModelIndex)), this, + SLOT(setCurrentPage(QModelIndex))); + connect(m_openPagesWidget, SIGNAL(closePage(QModelIndex)), this, + SLOT(closePage(QModelIndex))); + connect(m_openPagesWidget, SIGNAL(closePagesExcept(QModelIndex)), this, + SLOT(closePagesExcept(QModelIndex))); + } return m_openPagesWidget; } @@ -212,7 +212,8 @@ void OpenPagesManager::setCurrentPage(int index) CentralWidget::instance()->setCurrentPage(m_model->pageAt(index)); m_comboBox->setCurrentIndex(index); - m_openPagesWidget->selectCurrentPage(); + if (m_openPagesWidget) + m_openPagesWidget->selectCurrentPage(); } void OpenPagesManager::setCurrentPage(const QModelIndex &index) @@ -223,6 +224,8 @@ void OpenPagesManager::setCurrentPage(const QModelIndex &index) void OpenPagesManager::closeCurrentPage() { + if (!m_openPagesWidget) + return; QModelIndexList indexes = m_openPagesWidget->selectionModel()->selectedRows(); if (indexes.isEmpty()) return; @@ -283,7 +286,8 @@ void OpenPagesManager::removePage(int index) CentralWidget::instance()->removePage(index); emit pagesChanged(); - m_openPagesWidget->selectCurrentPage(); + if (m_openPagesWidget) + m_openPagesWidget->selectCurrentPage(); } void OpenPagesManager::showTwicherOrSelectPage() const diff --git a/src/plugins/help/openpagesmanager.h b/src/plugins/help/openpagesmanager.h index 42b84ba7b32..bf8d92674a7 100644 --- a/src/plugins/help/openpagesmanager.h +++ b/src/plugins/help/openpagesmanager.h @@ -92,7 +92,7 @@ private slots: private: QComboBox *m_comboBox; OpenPagesModel *m_model; - OpenPagesWidget *m_openPagesWidget; + mutable OpenPagesWidget *m_openPagesWidget; OpenPagesSwitcher *m_openPagesSwitcher; static OpenPagesManager *m_instance; -- GitLab