From b5edc14b09454b7c61477dd6b85b1327b1eec1da Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Thu, 18 Jun 2009 15:57:50 +0200
Subject: [PATCH] Do lazy updating of the file list in AllProjectsFilter.

---
 .../projectexplorer/allprojectsfilter.cpp      | 18 +++++++++++++-----
 .../projectexplorer/allprojectsfilter.h        |  6 +++++-
 src/plugins/quickopen/basefilefilter.cpp       |  5 +++++
 src/plugins/quickopen/basefilefilter.h         |  1 +
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp
index 7ab9bb4ce92..24a396d1fc7 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.cpp
+++ b/src/plugins/projectexplorer/allprojectsfilter.cpp
@@ -40,16 +40,24 @@ using namespace ProjectExplorer;
 using namespace ProjectExplorer::Internal;
 
 AllProjectsFilter::AllProjectsFilter(ProjectExplorerPlugin *pe)
+    : m_projectExplorer(pe), m_filesUpToDate(false)
 {
-    m_projectExplorer = pe;
     connect(m_projectExplorer, SIGNAL(fileListChanged()),
-            this, SLOT(refreshInternally()));
+            this, SLOT(markFilesAsOutOfDate()));
     setShortcutString("a");
     setIncludedByDefault(true);
 }
 
-void AllProjectsFilter::refreshInternally()
+void AllProjectsFilter::markFilesAsOutOfDate()
 {
+    m_filesUpToDate = false;
+}
+
+void AllProjectsFilter::updateFiles()
+{
+    if (m_filesUpToDate)
+        return;
+    m_filesUpToDate = true;
     m_files.clear();
     SessionManager *session = m_projectExplorer->session();
     if (!session)
@@ -64,7 +72,7 @@ void AllProjectsFilter::refresh(QFutureInterface<void> &future)
 {
     Q_UNUSED(future);
     // invokeAsyncronouslyOnGuiThread
-    connect(this, SIGNAL(invokeRefresh()), this, SLOT(refreshInternally()));
+    connect(this, SIGNAL(invokeRefresh()), this, SLOT(markFilesAsOutOfDate()));
     emit invokeRefresh();
-    disconnect(this, SIGNAL(invokeRefresh()), this, SLOT(refreshInternally()));
+    disconnect(this, SIGNAL(invokeRefresh()), this, SLOT(markFilesAsOutOfDate()));
 }
diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h
index f4865809431..f0cf3afea05 100644
--- a/src/plugins/projectexplorer/allprojectsfilter.h
+++ b/src/plugins/projectexplorer/allprojectsfilter.h
@@ -53,12 +53,16 @@ public:
     QuickOpen::IQuickOpenFilter::Priority priority() const { return QuickOpen::IQuickOpenFilter::Low; }
     void refresh(QFutureInterface<void> &future);
 
+protected:
+    void updateFiles();
+
 private slots:
-    void refreshInternally();
+    void markFilesAsOutOfDate();
 signals:
     void invokeRefresh();
 private:
     ProjectExplorerPlugin *m_projectExplorer;
+    bool m_filesUpToDate;
 };
 
 } // namespace Internal
diff --git a/src/plugins/quickopen/basefilefilter.cpp b/src/plugins/quickopen/basefilefilter.cpp
index ae09c3128c7..c895af5a7c2 100644
--- a/src/plugins/quickopen/basefilefilter.cpp
+++ b/src/plugins/quickopen/basefilefilter.cpp
@@ -43,6 +43,7 @@ BaseFileFilter::BaseFileFilter()
 
 QList<FilterEntry> BaseFileFilter::matchesFor(const QString &origEntry)
 {
+    updateFiles();
     QList<FilterEntry> matches;
     QList<FilterEntry> badMatches;
     QString needle = trimWildcards(origEntry);
@@ -104,3 +105,7 @@ void BaseFileFilter::generateFileNames()
     }
     m_forceNewSearchList = true;
 }
+
+void BaseFileFilter::updateFiles()
+{
+}
diff --git a/src/plugins/quickopen/basefilefilter.h b/src/plugins/quickopen/basefilefilter.h
index e1ff1e10f20..30bf0591325 100644
--- a/src/plugins/quickopen/basefilefilter.h
+++ b/src/plugins/quickopen/basefilefilter.h
@@ -48,6 +48,7 @@ public:
     void accept(QuickOpen::FilterEntry selection) const;
 
 protected:
+    virtual void updateFiles();
     void generateFileNames();
 
     QStringList m_files;
-- 
GitLab