summaryrefslogtreecommitdiff
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.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index 9ec611200f..75d7caf7c5 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -456,20 +456,21 @@ void Client::requestDocumentHighlights(TextEditor::TextEditorWidget *widget)
return;
}
- auto runningRequest = m_highlightRequests.find(uri);
- if (runningRequest != m_highlightRequests.end())
- cancelRequest(runningRequest.value());
+ if (m_highlightRequests.contains(widget))
+ cancelRequest(m_highlightRequests.take(widget));
DocumentHighlightsRequest request(
TextDocumentPositionParams(TextDocumentIdentifier(uri), Position(widget->textCursor())));
+ auto connection = connect(widget, &QObject::destroyed, this, [this, widget]() {
+ if (m_highlightRequests.contains(widget))
+ cancelRequest(m_highlightRequests.take(widget));
+ });
request.setResponseCallback(
- [widget = QPointer<TextEditor::TextEditorWidget>(widget), this, uri]
+ [widget, this, uri, connection]
(const DocumentHighlightsRequest::Response &response)
{
- m_highlightRequests.remove(uri);
- if (!widget)
- return;
-
+ m_highlightRequests.remove(widget);
+ disconnect(connection);
const Id &id = TextEditor::TextEditorWidget::CodeSemanticsSelection;
QList<QTextEdit::ExtraSelection> selections;
const Utils::optional<DocumentHighlightsResult> &result = response.result();
@@ -493,7 +494,7 @@ void Client::requestDocumentHighlights(TextEditor::TextEditorWidget *widget)
}
widget->setExtraSelections(id, selections);
});
- m_highlightRequests[uri] = request.id();
+ m_highlightRequests[widget] = request.id();
sendContent(request);
}
@@ -713,19 +714,19 @@ void Client::cursorPositionChanged(TextEditor::TextEditorWidget *widget)
QTimer *timer = m_documentHighlightsTimer[widget];
if (!timer) {
const auto uri = DocumentUri::fromFilePath(widget->textDocument()->filePath());
- auto runningRequest = m_highlightRequests.find(uri);
- if (runningRequest != m_highlightRequests.end())
- cancelRequest(runningRequest.value());
+ if (m_highlightRequests.contains(widget))
+ cancelRequest(m_highlightRequests.take(widget));
timer = new QTimer;
timer->setSingleShot(true);
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);
m_documentHighlightsTimer.take(widget)->deleteLater();
});
- connect(widget, &QWidget::destroyed, this, [widget, this]() {
- delete m_documentHighlightsTimer.take(widget);
- });
}
const Id selectionsId(TextEditor::TextEditorWidget::CodeSemanticsSelection);
const QList semanticSelections = widget->extraSelections(selectionsId);