Editor: only close proposal widgets after updates

To prevent closing function hint widgets after the completion processor
did not return a proposal.

Change-Id: I1901f3f21917d348ef12a6db846739e3c54752fb
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2022-06-24 13:06:05 +02:00
parent 551d458605
commit 84ef111847

View File

@@ -64,7 +64,10 @@ public:
void invoke(AssistKind kind, IAssistProvider *provider = nullptr); void invoke(AssistKind kind, IAssistProvider *provider = nullptr);
void process(); void process();
void requestProposal(AssistReason reason, AssistKind kind, IAssistProvider *provider = nullptr); void requestProposal(AssistReason reason,
AssistKind kind,
IAssistProvider *provider = nullptr,
bool isUpdate = false);
void cancelCurrentRequest(); void cancelCurrentRequest();
void invalidateCurrentRequestData(); void invalidateCurrentRequestData();
void displayProposal(IAssistProposal *newProposal, AssistReason reason); void displayProposal(IAssistProposal *newProposal, AssistReason reason);
@@ -192,7 +195,8 @@ void CodeAssistantPrivate::process()
void CodeAssistantPrivate::requestProposal(AssistReason reason, void CodeAssistantPrivate::requestProposal(AssistReason reason,
AssistKind kind, AssistKind kind,
IAssistProvider *provider) IAssistProvider *provider,
bool isUpdate)
{ {
// make sure to cleanup old proposals if we cannot find a new assistant // make sure to cleanup old proposals if we cannot find a new assistant
Utils::ExecuteOnDestruction earlyReturnContextClear([this]() { destroyContext(); }); Utils::ExecuteOnDestruction earlyReturnContextClear([this]() { destroyContext(); });
@@ -284,6 +288,7 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason,
displayProposal(newProposal, reason); displayProposal(newProposal, reason);
delete processor; delete processor;
} else if (!processor->running()) { } else if (!processor->running()) {
if (isUpdate)
destroyContext(); destroyContext();
delete processor; delete processor;
} else { // ...async request was triggered } else { // ...async request was triggered
@@ -487,7 +492,7 @@ void CodeAssistantPrivate::notifyChange()
if (!isDisplayingProposal()) if (!isDisplayingProposal())
requestActivationCharProposal(); requestActivationCharProposal();
} else { } else {
requestProposal(m_proposal->reason(), m_assistKind, m_requestProvider); requestProposal(m_proposal->reason(), m_assistKind, m_requestProvider, true);
} }
} }
} }