diff options
Diffstat (limited to 'src/plugins/languageclient/client.cpp')
-rw-r--r-- | src/plugins/languageclient/client.cpp | 20 |
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); } } |