aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/texteditor/codeassist
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2022-06-23 14:35:52 +0200
committerDavid Schulz <david.schulz@qt.io>2022-06-24 04:15:57 +0000
commitc3cb26215476e089119f24e8408dfb9f81c2c1f6 (patch)
tree24eb7d9417569708d0a209611fc4d0a391703d86 /src/plugins/texteditor/codeassist
parent67a08683d153ea7192b72b25c56d01e1c20e7c4f (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.cpp4
-rw-r--r--src/plugins/texteditor/codeassist/iassistproposal.h4
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