From 30587e6dce2d2bc2891f0863aade7ce5f1d21f12 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 6 Nov 2019 10:14:13 +0100 Subject: [PATCH] LanguageClient: Do not add hover handler twice to editor Check whether an editor already contains the hover handler before adding to the list of handlers. Also remove the handler when a document is deactivated for a specific client. Change-Id: Iec1d3a0fd1dc3f02c8dd50b8968ff063efe2508a Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 6 +++++- src/plugins/texteditor/texteditor.cpp | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 3757800a070..c036646c59e 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -377,7 +377,7 @@ void Client::activateDocument(TextEditor::TextDocument *document) for (Core::IEditor *editor : Core::DocumentModel::editorsForDocument(document)) { updateEditorToolBar(editor); if (auto textEditor = qobject_cast(editor)) - textEditor->editorWidget()->addHoverHandler(hoverHandler()); + textEditor->editorWidget()->addHoverHandler(&m_hoverHandler); } } @@ -387,6 +387,10 @@ void Client::deactivateDocument(TextEditor::TextDocument *document) resetAssistProviders(document); if (TextEditor::SyntaxHighlighter *highlighter = document->syntaxHighlighter()) highlighter->clearAllExtraFormats(); + for (Core::IEditor *editor : Core::DocumentModel::editorsForDocument(document)) { + if (auto textEditor = qobject_cast(editor)) + textEditor->editorWidget()->removeHoverHandler(&m_hoverHandler); + } } bool Client::documentOpen(TextEditor::TextDocument *document) const diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 570d29362eb..80bbe1323b4 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -5640,7 +5640,8 @@ void TextEditorWidget::showDefaultContextMenu(QContextMenuEvent *e, Id menuConte void TextEditorWidget::addHoverHandler(BaseHoverHandler *handler) { - d->m_hoverHandlers.append(handler); + if (!d->m_hoverHandlers.contains(handler)) + d->m_hoverHandlers.append(handler); } void TextEditorWidget::removeHoverHandler(BaseHoverHandler *handler)