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