From 95fac2b09603fb32109894a7379e39599050550c Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Mon, 13 Jul 2009 13:47:46 +0200
Subject: [PATCH] Fix crash when pressing '+' twice in Qt version settings.

Bug was introduced when separating the version list into "Autodetected" and
"Manual" subtrees.
---
 .../qt4projectmanager/qtoptionspage.cpp       | 19 +++++++++++++++++--
 src/plugins/qt4projectmanager/qtoptionspage.h |  1 +
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp
index 34d57883f66..6c5c4c4a9cc 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.cpp
+++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp
@@ -370,6 +370,21 @@ int QtOptionsPageWidget::indexForTreeItem(QTreeWidgetItem *item) const
     return -1;
 }
 
+QTreeWidgetItem *QtOptionsPageWidget::treeItemForIndex(int index) const
+{
+    int uniqueId = m_versions.at(index)->uniqueId();
+    for (int i = 0; i < m_ui->qtdirList->topLevelItemCount(); ++i) {
+        QTreeWidgetItem *toplevelItem = m_ui->qtdirList->topLevelItem(i);
+        for (int j = 0; j < toplevelItem->childCount(); ++j) {
+            QTreeWidgetItem *item = toplevelItem->child(j);
+            if (item->data(0, Qt::UserRole).toInt() == uniqueId) {
+                return item;
+            }
+        }
+    }
+    return 0;
+}
+
 void QtOptionsPageWidget::versionChanged(QTreeWidgetItem *item, QTreeWidgetItem *old)
 {
     if (old) {
@@ -454,11 +469,11 @@ void QtOptionsPageWidget::fixQtVersionName(int index)
     if (index < 0)
         return;
     int count = m_versions.count();
+    QString name = m_versions.at(index)->name();
     for (int i = 0; i < count; ++i) {
         if (i != index) {
             if (m_versions.at(i)->name() == m_versions.at(index)->name()) {
                 // Same name, find new name
-                QString name = m_versions.at(index)->name();
                 QRegExp regexp("^(.*)\\((\\d)\\)$");
                 if (regexp.exactMatch(name)) {
                     // Alreay in Name (#) format
@@ -468,7 +483,7 @@ void QtOptionsPageWidget::fixQtVersionName(int index)
                 }
                 // set new name
                 m_versions[index]->setName(name);
-                m_ui->qtdirList->topLevelItem(index)->setText(0, name);
+                treeItemForIndex(index)->setText(0, name);
                 m_ui->defaultCombo->setItemText(index, name);
 
                 // Now check again...
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.h b/src/plugins/qt4projectmanager/qtoptionspage.h
index a78b80460e0..57275795fe6 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.h
+++ b/src/plugins/qt4projectmanager/qtoptionspage.h
@@ -61,6 +61,7 @@ private:
     void fixQtVersionName(int index);
     int indexForWidget(QWidget *debuggingHelperWidget) const;
     int indexForTreeItem(QTreeWidgetItem *item) const;
+    QTreeWidgetItem *treeItemForIndex(int index) const;
 
     Internal::Ui::QtVersionManager *m_ui;
     QList<QtVersion *> m_versions;
-- 
GitLab