LanguageClient: prevent multiple TextEditorWidget connections

Change-Id: I97c7cb00bad898cc5f698bd3dcee23e44acfa9e2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-03-30 10:33:09 +02:00
parent 1e8879ee72
commit f13d402b31

View File

@@ -707,13 +707,14 @@ void Client::cursorPositionChanged(TextEditor::TextEditorWidget *widget)
timer = new QTimer; timer = new QTimer;
timer->setSingleShot(true); timer->setSingleShot(true);
m_documentHighlightsTimer.insert(widget, timer); m_documentHighlightsTimer.insert(widget, timer);
connect(timer, &QTimer::timeout, this, [this, widget]() { auto connection = connect(widget, &QWidget::destroyed, this, [widget, this]() {
delete m_documentHighlightsTimer.take(widget);
});
connect(timer, &QTimer::timeout, this, [this, widget, connection]() {
disconnect(connection);
requestDocumentHighlights(widget); requestDocumentHighlights(widget);
m_documentHighlightsTimer.take(widget)->deleteLater(); m_documentHighlightsTimer.take(widget)->deleteLater();
}); });
connect(widget, &QWidget::destroyed, this, [widget, this]() {
delete m_documentHighlightsTimer.take(widget);
});
} }
const Id selectionsId(TextEditor::TextEditorWidget::CodeSemanticsSelection); const Id selectionsId(TextEditor::TextEditorWidget::CodeSemanticsSelection);
const QList semanticSelections = widget->extraSelections(selectionsId); const QList semanticSelections = widget->extraSelections(selectionsId);