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 ¤ 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 ¤t); + void invalidateCurrentIndex(); void updateSummaryText(); void renamedVariable(const QString &name); -- GitLab