aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient/client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/languageclient/client.cpp')
-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);
}
}