diff --git a/src/plugins/coreplugin/locator/basefilefilter.h b/src/plugins/coreplugin/locator/basefilefilter.h index 44102b30e4e..b8e95dc06f0 100644 --- a/src/plugins/coreplugin/locator/basefilefilter.h +++ b/src/plugins/coreplugin/locator/basefilefilter.h @@ -46,6 +46,7 @@ public: void accept(Core::LocatorFilterEntry selection) const; protected: + // runs in non-UI thread virtual void updateFiles(); void generateFileNames(); diff --git a/src/plugins/projectexplorer/allprojectsfilter.cpp b/src/plugins/projectexplorer/allprojectsfilter.cpp index fd4b44e9ed3..6972b25daa7 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.cpp +++ b/src/plugins/projectexplorer/allprojectsfilter.cpp @@ -55,16 +55,21 @@ void AllProjectsFilter::markFilesAsOutOfDate() m_filesUpToDate = false; } -void AllProjectsFilter::updateFiles() +void AllProjectsFilter::updateFilesImpl() { if (m_filesUpToDate) return; - m_filesUpToDate = true; files().clear(); foreach (Project *project, SessionManager::projects()) files().append(project->files(Project::AllFiles)); Utils::sort(files()); generateFileNames(); + m_filesUpToDate = true; +} + +void AllProjectsFilter::updateFiles() +{ + QMetaObject::invokeMethod(this, "updateFilesImpl", Qt::BlockingQueuedConnection); } void AllProjectsFilter::refresh(QFutureInterface &future) diff --git a/src/plugins/projectexplorer/allprojectsfilter.h b/src/plugins/projectexplorer/allprojectsfilter.h index 0e5b79b5617..1d12e6d54d0 100644 --- a/src/plugins/projectexplorer/allprojectsfilter.h +++ b/src/plugins/projectexplorer/allprojectsfilter.h @@ -50,6 +50,7 @@ protected: private slots: void markFilesAsOutOfDate(); + void updateFilesImpl(); private: bool m_filesUpToDate; diff --git a/src/plugins/projectexplorer/currentprojectfilter.cpp b/src/plugins/projectexplorer/currentprojectfilter.cpp index 50917bb598f..2a04772e98b 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.cpp +++ b/src/plugins/projectexplorer/currentprojectfilter.cpp @@ -57,17 +57,22 @@ void CurrentProjectFilter::markFilesAsOutOfDate() m_filesUpToDate = false; } -void CurrentProjectFilter::updateFiles() +void CurrentProjectFilter::updateFilesImpl() { if (m_filesUpToDate) return; - m_filesUpToDate = true; files().clear(); if (!m_project) return; files() = m_project->files(Project::AllFiles); Utils::sort(files()); generateFileNames(); + m_filesUpToDate = true; +} + +void CurrentProjectFilter::updateFiles() +{ + QMetaObject::invokeMethod(this, "updateFilesImpl", Qt::BlockingQueuedConnection); } void CurrentProjectFilter::currentProjectChanged(ProjectExplorer::Project *project) diff --git a/src/plugins/projectexplorer/currentprojectfilter.h b/src/plugins/projectexplorer/currentprojectfilter.h index 25fe85a8acc..f1a9a5f682a 100644 --- a/src/plugins/projectexplorer/currentprojectfilter.h +++ b/src/plugins/projectexplorer/currentprojectfilter.h @@ -54,6 +54,7 @@ protected: private slots: void currentProjectChanged(ProjectExplorer::Project *project); void markFilesAsOutOfDate(); + void updateFilesImpl(); private: Project *m_project;