aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2020-09-10 09:12:20 +0200
committerDavid Schulz <david.schulz@qt.io>2020-09-11 11:57:34 +0000
commit3a51cdf2ba8f71133316e847a74d56ecec828ffd (patch)
treef137552b9d8151f4747fa2eb0eb7a33489bac268
parent3b23cab38579ab719e5aa7726c2007b9cb040f1e (diff)
LanguageClient: avoid recursive postponed document update
Change-Id: Ibaf8831977e254c7dad10617754e763114993aee Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/plugins/languageclient/client.cpp20
1 files 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<DocumentUpdate> updates;
+
const QList<TextEditor::TextDocument *> 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);
}
}