summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2016-12-15 11:21:44 +0100
committerNikolai Kosjar <nikolai.kosjar@qt.io>2016-12-16 13:56:31 +0000
commit602c873d3ec34d8dbee17557e405c35f5d3b317a (patch)
tree8b62bb1b1e1ff7c2e4aa9252d04b46e153878644 /src/plugins/cpptools/cppmodelmanager.cpp
parentbd66d5ac053db5f0b364d458e42f3c87432f8776 (diff)
downloadqt-creator-602c873d3ec34d8dbee17557e405c35f5d3b317a.tar.gz
CppTools: Reparse editor documents after active project change
Change-Id: I010709c866291bf59c27f4a05765e1ab0efd28af Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 890fe2b1a7..330501d3b3 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -338,6 +338,8 @@ CppModelManager::CppModelManager(QObject *parent)
this, &CppModelManager::onAboutToRemoveProject);
connect(sessionManager, &ProjectExplorer::SessionManager::aboutToLoadSession,
this, &CppModelManager::onAboutToLoadSession);
+ connect(sessionManager, &ProjectExplorer::SessionManager::startupProjectChanged,
+ this, &CppModelManager::onActiveProjectChanged);
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
this, &CppModelManager::onCurrentEditorChanged);
@@ -791,7 +793,7 @@ void CppModelManager::watchForCanceledProjectIndexer(QFuture<void> future,
watcher->setFuture(future);
}
-void CppModelManager::updateCppEditorDocuments() const
+void CppModelManager::updateCppEditorDocuments(bool hasActiveProjectChanged) const
{
// Refresh visible documents
QSet<Core::IDocument *> visibleCppEditorDocuments;
@@ -800,7 +802,7 @@ void CppModelManager::updateCppEditorDocuments() const
const QString filePath = document->filePath().toString();
if (CppEditorDocumentHandle *theCppEditorDocument = cppEditorDocument(filePath)) {
visibleCppEditorDocuments.insert(document);
- theCppEditorDocument->processor()->run();
+ theCppEditorDocument->processor()->run(hasActiveProjectChanged);
}
}
}
@@ -811,8 +813,12 @@ void CppModelManager::updateCppEditorDocuments() const
invisibleCppEditorDocuments.subtract(visibleCppEditorDocuments);
foreach (Core::IDocument *document, invisibleCppEditorDocuments) {
const QString filePath = document->filePath().toString();
- if (CppEditorDocumentHandle *theCppEditorDocument = cppEditorDocument(filePath))
- theCppEditorDocument->setNeedsRefresh(true);
+ if (CppEditorDocumentHandle *theCppEditorDocument = cppEditorDocument(filePath)) {
+ const CppEditorDocumentHandle::RefreshReason refreshReason = hasActiveProjectChanged
+ ? CppEditorDocumentHandle::ActiveProjectChange
+ : CppEditorDocumentHandle::Usual;
+ theCppEditorDocument->setRefreshReason(refreshReason);
+ }
}
}
@@ -1038,6 +1044,11 @@ void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project)
delayedGC();
}
+void CppModelManager::onActiveProjectChanged(ProjectExplorer::Project *)
+{
+ updateCppEditorDocuments(true);
+}
+
void CppModelManager::onSourceFilesRefreshed() const
{
if (BuiltinIndexingSupport::isFindErrorsIndexingActive()) {
@@ -1053,9 +1064,13 @@ void CppModelManager::onCurrentEditorChanged(Core::IEditor *editor)
const QString filePath = editor->document()->filePath().toString();
if (CppEditorDocumentHandle *theCppEditorDocument = cppEditorDocument(filePath)) {
- if (theCppEditorDocument->needsRefresh()) {
- theCppEditorDocument->setNeedsRefresh(false);
- theCppEditorDocument->processor()->run();
+ const CppEditorDocumentHandle::RefreshReason refreshReason
+ = theCppEditorDocument->refreshReason();
+ if (refreshReason != CppEditorDocumentHandle::None) {
+ theCppEditorDocument->setRefreshReason(CppEditorDocumentHandle::None);
+ const bool hasActiveProjectChanged
+ = refreshReason == CppEditorDocumentHandle::ActiveProjectChange;
+ theCppEditorDocument->processor()->run(hasActiveProjectChanged);
}
}
}