CodeAssistant: block suggestions while proposal is visible

Change-Id: I78068306252c5c32304ea97e3abb2d87fdee7832
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
David Schulz
2023-05-10 15:23:24 +02:00
parent 0b8a0f8f59
commit edeea10e6a

View File

@@ -81,6 +81,7 @@ private:
IAssistProcessor *m_processor = nullptr; IAssistProcessor *m_processor = nullptr;
AssistKind m_assistKind = TextEditor::Completion; AssistKind m_assistKind = TextEditor::Completion;
IAssistProposalWidget *m_proposalWidget = nullptr; IAssistProposalWidget *m_proposalWidget = nullptr;
TextEditorWidget::SuggestionBlocker m_suggestionBlocker;
bool m_receivedContentWhileWaiting = false; bool m_receivedContentWhileWaiting = false;
QTimer m_automaticProposalTimer; QTimer m_automaticProposalTimer;
CompletionSettings m_settings; CompletionSettings m_settings;
@@ -295,6 +296,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR
m_proposalWidget->setDisplayRect(m_editorWidget->cursorRect(basePosition)); m_proposalWidget->setDisplayRect(m_editorWidget->cursorRect(basePosition));
m_proposalWidget->setIsSynchronized(!m_receivedContentWhileWaiting); m_proposalWidget->setIsSynchronized(!m_receivedContentWhileWaiting);
m_proposalWidget->showProposal(prefix); m_proposalWidget->showProposal(prefix);
m_suggestionBlocker = m_editorWidget->blockSuggestions();
} }
void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *proposalItem) void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *proposalItem)
@@ -337,6 +339,7 @@ void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix)
void CodeAssistantPrivate::finalizeProposal() void CodeAssistantPrivate::finalizeProposal()
{ {
stopAutomaticProposalTimer(); stopAutomaticProposalTimer();
m_suggestionBlocker.reset();
m_proposalWidget = nullptr; m_proposalWidget = nullptr;
if (m_receivedContentWhileWaiting) if (m_receivedContentWhileWaiting)
m_receivedContentWhileWaiting = false; m_receivedContentWhileWaiting = false;