diff options
| author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-10-25 11:32:11 +0200 |
|---|---|---|
| committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2018-11-06 10:01:25 +0000 |
| commit | 44b71f7a1669c1021e19bc1b34aea806a60f65a1 (patch) | |
| tree | ff84d3456e022f097276ea2e567992c7c4aa4248 /src/plugins/texteditor/codeassist/codeassistant.cpp | |
| parent | 7cc1dc7d1a9d9e469071fd9fd11c98934bc08215 (diff) | |
| download | qt-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.cpp | 17 |
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) |
