From 3a51cdf2ba8f71133316e847a74d56ecec828ffd Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 10 Sep 2020 09:12:20 +0200 Subject: LanguageClient: avoid recursive postponed document update Change-Id: Ibaf8831977e254c7dad10617754e763114993aee Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index bac9ea316e..473432b527 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1139,6 +1139,15 @@ void Client::sendPostponedDocumentUpdates() return; TextEditor::TextEditorWidget *currentWidget = TextEditor::TextEditorWidget::currentTextEditorWidget(); + + struct DocumentUpdate + { + TextEditor::TextDocument *document; + DidChangeTextDocumentNotification notification; + }; + + QList updates; + const QList documents = m_documentsToUpdate.keys(); for (auto document : documents) { const auto uri = DocumentUri::fromFilePath(document->filePath()); @@ -1148,10 +1157,15 @@ void Client::sendPostponedDocumentUpdates() DidChangeTextDocumentParams params; params.setTextDocument(docId); params.setContentChanges(m_documentsToUpdate.take(document)); - sendContent(DidChangeTextDocumentNotification(params)); - emit documentUpdated(document); - if (currentWidget && currentWidget->textDocument() == document) + updates.append({document, DidChangeTextDocumentNotification(params)}); + } + + for (const DocumentUpdate &update : qAsConst(updates)) { + sendContent(update.notification); + emit documentUpdated(update.document); + + if (currentWidget && currentWidget->textDocument() == update.document) cursorPositionChanged(currentWidget); } } -- cgit v1.2.3