forked from qt-creator/qt-creator
TextEditor: prevent crash on updating the completion model
Prevent updating the model with something other than a generic proposal model. Change-Id: I3880c1ce4ae7cf0aa4fb72d59b75a40db3f53482 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -289,7 +289,12 @@ public:
|
|||||||
{
|
{
|
||||||
if (!proposal)
|
if (!proposal)
|
||||||
return;
|
return;
|
||||||
updateModel(proposal->model(), prefix);
|
if (proposal->id() != TextEditor::Constants::GENERIC_PROPOSAL_ID) {
|
||||||
|
// We received something else than a generic proposal so we cannot update the model
|
||||||
|
closeProposal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
updateModel(proposal->model().staticCast<GenericProposalModel>(), prefix);
|
||||||
delete proposal;
|
delete proposal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -392,12 +392,12 @@ void GenericProposalWidget::setIsSynchronized(bool isSync)
|
|||||||
d->m_isSynchronized = isSync;
|
d->m_isSynchronized = isSync;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericProposalWidget::updateModel(ProposalModelPtr model, const QString &prefix)
|
void GenericProposalWidget::updateModel(GenericProposalModelPtr model, const QString &prefix)
|
||||||
{
|
{
|
||||||
QString currentText;
|
QString currentText;
|
||||||
if (d->m_explicitlySelected)
|
if (d->m_explicitlySelected)
|
||||||
currentText = d->m_model->text(d->m_completionListView->currentIndex().row());
|
currentText = d->m_model->text(d->m_completionListView->currentIndex().row());
|
||||||
d->m_model = model.staticCast<GenericProposalModel>();
|
d->m_model = model;
|
||||||
if (d->m_model->containsDuplicates())
|
if (d->m_model->containsDuplicates())
|
||||||
d->m_model->removeDuplicates();
|
d->m_model->removeDuplicates();
|
||||||
d->m_completionListView->setModel(new ModelAdapter(d->m_model, d->m_completionListView));
|
d->m_completionListView->setModel(new ModelAdapter(d->m_model, d->m_completionListView));
|
||||||
|
@@ -31,7 +31,7 @@ public:
|
|||||||
void setDisplayRect(const QRect &rect) override;
|
void setDisplayRect(const QRect &rect) override;
|
||||||
void setIsSynchronized(bool isSync) override;
|
void setIsSynchronized(bool isSync) override;
|
||||||
|
|
||||||
void updateModel(ProposalModelPtr model, const QString &prefix);
|
void updateModel(GenericProposalModelPtr model, const QString &prefix);
|
||||||
|
|
||||||
void showProposal(const QString &prefix) override;
|
void showProposal(const QString &prefix) override;
|
||||||
void filterProposal(const QString &prefix) override;
|
void filterProposal(const QString &prefix) override;
|
||||||
|
Reference in New Issue
Block a user