summaryrefslogtreecommitdiff
path: root/src/plugins/texteditor/codeassist/codeassistant.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2018-10-25 11:32:11 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2018-11-06 10:01:25 +0000
commit44b71f7a1669c1021e19bc1b34aea806a60f65a1 (patch)
treeff84d3456e022f097276ea2e567992c7c4aa4248 /src/plugins/texteditor/codeassist/codeassistant.cpp
parent7cc1dc7d1a9d9e469071fd9fd11c98934bc08215 (diff)
downloadqt-creator-44b71f7a1669c1021e19bc1b34aea806a60f65a1.tar.gz
CodeAssist: Avoid pointless completion request after accepting item
Previously, accepting an item from the completion pop-up triggered another completion request, but the result of that request was never displayed since the inserted text was a perfect match. Now, trigger another completion request only if the inserted text matches the activation characters. Change-Id: Ic8ed4139efb10aadc8d41105634fcc856e0a15be Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/texteditor/codeassist/codeassistant.cpp')
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 9abbe3a8f1..1290199a54 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -104,6 +104,7 @@ private:
IAssistProposalWidget *m_proposalWidget = nullptr;
QScopedPointer<IAssistProposal> m_proposal;
bool m_receivedContentWhileWaiting = false;
+ bool m_proposalItemProcessed = false;
QTimer m_automaticProposalTimer;
CompletionSettings m_settings;
int m_abortedBasePosition = -1;
@@ -192,6 +193,13 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
if (m_editorWidget->hasBlockSelection())
return; // TODO
+ if (m_proposalItemProcessed
+ && reason == IdleEditor
+ && m_assistKind == TextEditor::Completion
+ && !identifyActivationSequence()) {
+ return;
+ }
+
if (!provider) {
if (kind == Completion)
provider = m_editorWidget->textDocument()->completionAssistProvider();
@@ -358,6 +366,15 @@ void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *prop
if (!proposalItem->isSnippet())
process();
m_editorWidget->encourageApply();
+ m_proposalItemProcessed = true;
+
+ auto connection = std::make_shared<QMetaObject::Connection>();
+ *connection = connect(m_editorWidget->textDocument(),
+ &Core::IDocument::contentsChanged,
+ this, [this, connection] {
+ m_proposalItemProcessed = false;
+ disconnect(*connection);
+ });
}
void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)