diff options
author | David Schulz <david.schulz@qt.io> | 2022-06-23 14:35:52 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2022-06-24 04:15:57 +0000 |
commit | c3cb26215476e089119f24e8408dfb9f81c2c1f6 (patch) | |
tree | 24eb7d9417569708d0a209611fc4d0a391703d86 /src/plugins/texteditor/codeassist | |
parent | 67a08683d153ea7192b72b25c56d01e1c20e7c4f (diff) |
Editor: Fix dangling completion widgets
Set the correct assist reason when rerequesting a code assist to be able
to detect perfect matches. Also destroy the code assist context when the
processor is not running and has not returned a proposal after perform.
Change-Id: Ieb04203269076655ac3d7ffc54ea8a1d055194a4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/texteditor/codeassist')
-rw-r--r-- | src/plugins/texteditor/codeassist/codeassistant.cpp | 4 | ||||
-rw-r--r-- | src/plugins/texteditor/codeassist/iassistproposal.h | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index d16ad59146..e324fb6dd5 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -284,6 +284,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, displayProposal(newProposal, reason); delete processor; } else if (!processor->running()) { + destroyContext(); delete processor; } else { // ...async request was triggered if (IAssistProposal *newProposal = processor->immediateProposal(assistInterface)) @@ -354,6 +355,7 @@ void CodeAssistantPrivate::displayProposal(IAssistProposal *newProposal, AssistR clearAbortedPosition(); m_proposal.reset(proposalCandidate.take()); + m_proposal->setReason(reason); if (m_proposal->isCorrective(m_editorWidget)) m_proposal->makeCorrection(m_editorWidget); @@ -485,7 +487,7 @@ void CodeAssistantPrivate::notifyChange() if (!isDisplayingProposal()) requestActivationCharProposal(); } else { - requestProposal(ExplicitlyInvoked, m_assistKind, m_requestProvider); + requestProposal(m_proposal->reason(), m_assistKind, m_requestProvider); } } } diff --git a/src/plugins/texteditor/codeassist/iassistproposal.h b/src/plugins/texteditor/codeassist/iassistproposal.h index d4784a3f60..1393cbab83 100644 --- a/src/plugins/texteditor/codeassist/iassistproposal.h +++ b/src/plugins/texteditor/codeassist/iassistproposal.h @@ -57,11 +57,15 @@ public: Utils::Id id() const { return m_id; } + AssistReason reason() const { return m_reason; } + void setReason(const AssistReason &reason) { m_reason = reason; } + protected: Utils::Id m_id; int m_basePosition; bool m_isFragile = false; bool m_supportsPrefix = true; + AssistReason m_reason; }; } // TextEditor |