diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/clangcodemodel/clangfollowsymbol.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/plugins/clangcodemodel/clangfollowsymbol.cpp b/src/plugins/clangcodemodel/clangfollowsymbol.cpp index c430c810c3..e5c66f6c6b 100644 --- a/src/plugins/clangcodemodel/clangfollowsymbol.cpp +++ b/src/plugins/clangcodemodel/clangfollowsymbol.cpp @@ -26,6 +26,7 @@ #include "clangeditordocumentprocessor.h" #include "clangfollowsymbol.h" +#include <coreplugin/editormanager/editormanager.h> #include <cpptools/cppmodelmanager.h> #include <texteditor/texteditor.h> @@ -155,6 +156,12 @@ static ::Utils::ProcessLinkCallback extendedCallback(::Utils::ProcessLinkCallbac }; } +static bool isSameInvocationContext(const Utils::FileName &filePath) +{ + return TextEditor::BaseTextEditor::currentTextEditor()->editorWidget()->isVisible() + && Core::EditorManager::currentDocument()->filePath() == filePath; +} + void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data, ::Utils::ProcessLinkCallback &&processLinkCallback, bool resolveTarget, @@ -194,9 +201,9 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data, m_watcher.reset(new FutureSymbolWatcher()); - QObject::connect(m_watcher.get(), &FutureSymbolWatcher::finished, - [=, callback=std::move(processLinkCallback)]() mutable { - if (m_watcher->isCanceled()) + QObject::connect(m_watcher.get(), &FutureSymbolWatcher::finished, [=, filePath=data.filePath(), + callback=std::move(processLinkCallback)]() mutable { + if (m_watcher->isCanceled() || !isSameInvocationContext(filePath)) return callback(Utils::Link()); CppTools::SymbolInfo result = m_watcher->result(); // We did not fail but the result is empty |