From f8a1b9438192dc64e8879284ae59264fd697c135 Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@nokia.com>
Date: Wed, 7 Dec 2011 17:52:59 +0100
Subject: [PATCH] Don't react to profileUpdated on failure or while still in
 progress

Change-Id: I88fa7b7e3165d3b89af4e68a1b1c17082f29510a
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
---
 src/plugins/qt4projectmanager/qt4buildconfiguration.cpp  | 6 ++++--
 src/plugins/qt4projectmanager/qt4buildconfiguration.h    | 2 +-
 src/plugins/qt4projectmanager/qt4nodes.cpp               | 1 +
 src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp | 9 ++++++++-
 src/plugins/qt4projectmanager/qt4projectconfigwidget.h   | 2 ++
 5 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index f4699251d22..7be33a0a0d4 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -189,7 +189,7 @@ void Qt4BuildConfiguration::ctor()
     connect(this, SIGNAL(environmentChanged()),
             this, SLOT(emitProFileEvaluateNeeded()));
     connect(qt4Target()->qt4Project(), SIGNAL(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)),
-            this, SLOT(proFileUpdated()));
+            this, SLOT(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)));
 
     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance();
     connect(vm, SIGNAL(qtVersionsChanged(QList<int>)),
@@ -204,10 +204,12 @@ void Qt4BuildConfiguration::emitBuildDirectoryChanged()
     }
 }
 
-void Qt4BuildConfiguration::proFileUpdated()
+void Qt4BuildConfiguration::proFileUpdated(Qt4ProjectManager::Qt4ProFileNode *, bool success, bool parseInProgress)
 {
     // Changing the included Qt modules from 0 to at least one might have caused the
     // tool chain to become invalid.
+    if (!success || parseInProgress)
+        return;
     if (!qt4Target()->possibleToolChains(this).contains(toolChain()))
         setToolChain(qt4Target()->preferredToolChain(this));
 }
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 7631325c10b..76cb1175d5a 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -146,7 +146,7 @@ signals:
 private slots:
     void qtVersionsChanged(const QList<int> &changedVersions);
     void emitBuildDirectoryChanged();
-    void proFileUpdated();
+    void proFileUpdated(Qt4ProjectManager::Qt4ProFileNode *, bool, bool parseInProgress);
 
 protected:
     Qt4BuildConfiguration(Qt4BaseTarget *target, Qt4BuildConfiguration *source);
diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 1819417d907..d6daf3e4a3e 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -1598,6 +1598,7 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
     if (!m_readerExact)
         return;
     if (evalResult == EvalFail || m_project->wasEvaluateCanceled()) {
+        m_validParse = false;
         m_project->destroyProFileReader(m_readerExact);
         m_project->destroyProFileReader(m_readerCumulative);
         m_readerExact = m_readerCumulative = 0;
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 68be86bb38e..c9a0f417f55 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -123,7 +123,7 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4BaseTarget *target)
             this, SLOT(updateImportLabel()));
 
     connect(target->qt4Project(), SIGNAL(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)),
-            this, SLOT(updateToolChainCombo()));
+            this, SLOT(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)));
 
     connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsChanged()),
             this, SLOT(updateToolChainCombo()));
@@ -539,6 +539,13 @@ void Qt4ProjectConfigWidget::toolChainChanged()
     }
 }
 
+void Qt4ProjectConfigWidget::proFileUpdated(Qt4ProjectManager::Qt4ProFileNode *node, bool success, bool parseInProgress)
+{
+    if (!success || parseInProgress)
+        return;
+    updateToolChainCombo();
+}
+
 void Qt4ProjectConfigWidget::updateToolChainCombo()
 {
     m_ui->toolChainComboBox->clear();
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
index dd11b2e778f..890a324b6c4 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
@@ -46,6 +46,7 @@ namespace Utils {
 namespace Qt4ProjectManager {
 class Qt4BaseTarget;
 class Qt4BuildConfiguration;
+class Qt4ProFileNode;
 
 namespace Internal {
 namespace Ui {
@@ -80,6 +81,7 @@ private slots:
     void toolChainChanged();
     void updateImportLabel();
     void environmentChanged();
+    void proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool);
     void updateToolChainCombo();
 
 private:
-- 
GitLab