diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-12-15 11:21:44 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-12-16 13:56:31 +0000 |
commit | 602c873d3ec34d8dbee17557e405c35f5d3b317a (patch) | |
tree | 8b62bb1b1e1ff7c2e4aa9252d04b46e153878644 /src/plugins/cpptools/cppmodelmanager.cpp | |
parent | bd66d5ac053db5f0b364d458e42f3c87432f8776 (diff) | |
download | qt-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.cpp | 29 |
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); } } } |