Editor: ensure something is selected after model update

Change-Id: I3fbf14cb7aa60caef43340302e74e80ed5e3ba4c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2022-11-30 12:28:06 +01:00
parent 0313470db0
commit 69ce2a4047
3 changed files with 16 additions and 14 deletions

View File

@@ -285,11 +285,11 @@ public:
return static_cast<LanguageClientCompletionModel *>(model().data())->isComplete(prefix);
}
void setProposal(IAssistProposal *proposal)
void setProposal(IAssistProposal *proposal, const QString &prefix)
{
if (!proposal)
return;
updateModel(proposal->model());
updateModel(proposal->model(), prefix);
delete proposal;
}
@@ -303,7 +303,10 @@ public:
auto processor = m_provider->createProcessor(interface.get());
QTC_ASSERT(processor, return);
processor->setAsyncCompletionAvailableHandler([this, processor](IAssistProposal *proposal) {
const QString prefix = interface->textAt(m_basePosition,
interface->position() - m_basePosition);
processor->setAsyncCompletionAvailableHandler([this, processor, prefix](IAssistProposal *proposal) {
QTC_ASSERT(processor == m_processor, return);
if (!processor->running()) {
// do not delete this processor directly since this function is called from within the processor
@@ -313,10 +316,10 @@ public:
Qt::QueuedConnection);
m_processor = nullptr;
}
setProposal(proposal);
setProposal(proposal, prefix);
});
setProposal(processor->start(std::move(interface)));
setProposal(processor->start(std::move(interface)), prefix);
if (processor->running())
m_processor = processor;
else