diff options
author | David Schulz <david.schulz@qt.io> | 2020-09-10 09:12:20 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-09-11 11:57:34 +0000 |
commit | 3a51cdf2ba8f71133316e847a74d56ecec828ffd (patch) | |
tree | f137552b9d8151f4747fa2eb0eb7a33489bac268 | |
parent | 3b23cab38579ab719e5aa7726c2007b9cb040f1e (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.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); } } |