From c6c90a151eaa8dcd934151a427c2d088d1fa4f43 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Wed, 21 Apr 2010 10:15:40 +0200
Subject: [PATCH] Fix possible crash in environmenteditmodel

 * Do not trigger resets of the model when not necessary
 * Actually handle resets of the model when necessary

Tasknumber: QTCREATORBUG-1172
Reviewed-by: dt
---
 src/plugins/projectexplorer/environmenteditmodel.cpp | 12 ++++++++++++
 src/plugins/projectexplorer/environmenteditmodel.h   |  1 +
 2 files changed, 13 insertions(+)

diff --git a/src/plugins/projectexplorer/environmenteditmodel.cpp b/src/plugins/projectexplorer/environmenteditmodel.cpp
index cfe2796ca93..8a17cc23ee1 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.cpp
+++ b/src/plugins/projectexplorer/environmenteditmodel.cpp
@@ -70,6 +70,8 @@ void EnvironmentModel::updateResultEnvironment()
 
 void EnvironmentModel::setBaseEnvironment(const ProjectExplorer::Environment &env)
 {
+    if (m_baseEnvironment == env)
+        return;
     beginResetModel();
     m_baseEnvironment = env;
     updateResultEnvironment();
@@ -340,6 +342,9 @@ QList<EnvironmentItem> EnvironmentModel::userChanges() const
 
 void EnvironmentModel::setUserChanges(QList<EnvironmentItem> list)
 {
+    // We assume nobody is reordering the items here.
+    if (list == m_items)
+        return;
     beginResetModel();
     m_items = list;
     updateResultEnvironment();
@@ -356,6 +361,8 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails
     m_model = new EnvironmentModel();
     connect(m_model, SIGNAL(userChangesChanged()),
             this, SIGNAL(userChangesChanged()));
+    connect(m_model, SIGNAL(modelReset()),
+            this, SLOT(invalidateCurrentIndex()));
 
     connect(m_model, SIGNAL(renamedVariable(QString)),
             this, SLOT(renamedVariable(QString)));
@@ -538,3 +545,8 @@ void EnvironmentWidget::environmentCurrentIndexChanged(const QModelIndex &curren
         m_unsetButton->setEnabled(false);
     }
 }
+
+void EnvironmentWidget::invalidateCurrentIndex()
+{
+    environmentCurrentIndexChanged(QModelIndex());
+}
diff --git a/src/plugins/projectexplorer/environmenteditmodel.h b/src/plugins/projectexplorer/environmenteditmodel.h
index da1f81cac68..60eea7bc518 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.h
+++ b/src/plugins/projectexplorer/environmenteditmodel.h
@@ -122,6 +122,7 @@ private slots:
     void removeEnvironmentButtonClicked();
     void unsetEnvironmentButtonClicked();
     void environmentCurrentIndexChanged(const QModelIndex &current);
+    void invalidateCurrentIndex();
     void updateSummaryText();
     void renamedVariable(const QString &name);
 
-- 
GitLab