From 90c1c8f54d6c1cc6c05c8648f1f50b25663bd23e Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Tue, 2 Mar 2010 12:51:47 +0100
Subject: [PATCH] Cancel a previous update code model

---
 src/plugins/cpptools/cppmodelmanager.cpp        | 4 ++--
 src/plugins/cpptools/cppmodelmanager.h          | 2 +-
 src/plugins/cpptools/cppmodelmanagerinterface.h | 3 ++-
 src/plugins/qt4projectmanager/qt4project.cpp    | 4 ++--
 src/plugins/qt4projectmanager/qt4project.h      | 1 +
 5 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 069b8e6c9dd..d374f813d75 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -781,8 +781,8 @@ CppModelManager::WorkingCopy CppModelManager::workingCopy() const
     return const_cast<CppModelManager *>(this)->buildWorkingCopyList();
 }
 
-void CppModelManager::updateSourceFiles(const QStringList &sourceFiles)
-{ (void) refreshSourceFiles(sourceFiles); }
+QFuture<void> CppModelManager::updateSourceFiles(const QStringList &sourceFiles)
+{ return refreshSourceFiles(sourceFiles); }
 
 QList<CppModelManager::ProjectInfo> CppModelManager::projectInfos() const
 {
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index c6369f10f27..d77ba3c0a7a 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -87,7 +87,7 @@ public:
     CppModelManager(QObject *parent);
     virtual ~CppModelManager();
 
-    virtual void updateSourceFiles(const QStringList &sourceFiles);
+    virtual QFuture<void> updateSourceFiles(const QStringList &sourceFiles);
     virtual WorkingCopy workingCopy() const;
 
     virtual QList<ProjectInfo> projectInfos() const;
diff --git a/src/plugins/cpptools/cppmodelmanagerinterface.h b/src/plugins/cpptools/cppmodelmanagerinterface.h
index a08d874252a..771340dc8ed 100644
--- a/src/plugins/cpptools/cppmodelmanagerinterface.h
+++ b/src/plugins/cpptools/cppmodelmanagerinterface.h
@@ -36,6 +36,7 @@
 #include <QtCore/QHash>
 #include <QtCore/QPointer>
 #include <QtCore/QStringList>
+#include <QtCore/QFuture>
 
 namespace ProjectExplorer {
     class Project;
@@ -128,7 +129,7 @@ public:
 
 public Q_SLOTS:
     void updateModifiedSourceFiles();
-    virtual void updateSourceFiles(const QStringList &sourceFiles) = 0;
+    virtual QFuture<void> updateSourceFiles(const QStringList &sourceFiles) = 0;
     virtual void GC() = 0;
 };
 
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 68b7dc9b371..47ced1bdf3c 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -403,7 +403,7 @@ void Qt4Project::updateCodeModel()
     if (debug)
         qDebug()<<"Qt4Project::updateCodeModel()";
 
-    // TODO cancel still running indexing
+    m_codeModelFuture.cancel();
 
     if (!activeTarget() || !activeTarget()->activeBuildConfiguration())
         return;
@@ -576,7 +576,7 @@ void Qt4Project::updateCodeModel()
         pinfo.precompiledHeaders = allPrecompileHeaders;
 
         modelmanager->updateProjectInfo(pinfo);
-        modelmanager->updateSourceFiles(pinfo.sourceFiles);
+        m_codeModelFuture = modelmanager->updateSourceFiles(pinfo.sourceFiles);
     }
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index f4d9d48cea4..7846370d3bc 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -235,6 +235,7 @@ private:
     QList<Internal::Qt4ProFileNode *> m_partialEvaluate;
 
     QMap<QString, Internal::CodeModelInfo> m_codeModelInfo;
+    QFuture<void> m_codeModelFuture;
 
     friend class Qt4ProjectFile;
     friend class Internal::Qt4ProjectConfigWidget;
-- 
GitLab