diff options
3 files changed, 16 insertions, 14 deletions
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index afee00a5ac..23d6b3e3b2 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -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 diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index 9eb3fdcd37..bc00126dba 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -392,7 +392,7 @@ void GenericProposalWidget::setIsSynchronized(bool isSync) d->m_isSynchronized = isSync; } -void GenericProposalWidget::updateModel(ProposalModelPtr model) +void GenericProposalWidget::updateModel(ProposalModelPtr model, const QString &prefix) { QString currentText; if (d->m_explicitlySelected) @@ -403,16 +403,15 @@ void GenericProposalWidget::updateModel(ProposalModelPtr model) d->m_completionListView->setModel(new ModelAdapter(d->m_model, d->m_completionListView)); connect(d->m_completionListView->selectionModel(), &QItemSelectionModel::currentChanged, &d->m_infoTimer, QOverload<>::of(&QTimer::start)); - int currentRow = -1; if (!currentText.isEmpty()) { - currentRow = d->m_model->indexOf( + const int currentRow = d->m_model->indexOf( Utils::equal(&AssistProposalItemInterface::text, currentText)); + if (currentRow < 0) + d->m_explicitlySelected = false; + else + d->m_completionListView->selectRow(currentRow); } - if (currentRow >= 0) - d->m_completionListView->selectRow(currentRow); - else - d->m_explicitlySelected = false; - updatePositionAndSize(); + updateAndCheck(prefix); } void GenericProposalWidget::showProposal(const QString &prefix) diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.h b/src/plugins/texteditor/codeassist/genericproposalwidget.h index c38ccc9f47..6052677662 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.h +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.h @@ -31,7 +31,7 @@ public: void setDisplayRect(const QRect &rect) override; void setIsSynchronized(bool isSync) override; - void updateModel(ProposalModelPtr model); + void updateModel(ProposalModelPtr model, const QString &prefix); void showProposal(const QString &prefix) override; void filterProposal(const QString &prefix) override; |