Possibly fix a crash in the EventDelegateChooser

This commit is contained in:
Nicolas Werner 2023-10-20 19:40:53 +02:00
parent 78fac7dced
commit 071578923d
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
2 changed files with 18 additions and 8 deletions

View file

@ -269,7 +269,7 @@ EventDelegateChooser::DelegateIncubator::statusChanged(QQmlIncubator::Status sta
}
child->setParentItem(&chooser);
QQmlEngine::setObjectOwnership(child, QQmlEngine::ObjectOwnership::JavaScriptOwnership);
QQmlEngine::setObjectOwnership(child, QQmlEngine::ObjectOwnership::CppOwnership);
// connect(child, &QQuickItem::parentChanged, child, [child](QQuickItem *) {
// // QTBUG-115687

View file

@ -989,8 +989,11 @@ TimelineModel::data(const QModelIndex &index, int role) const
void
TimelineModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
if (index.row() < 0 && index.row() >= rowCount())
if (index.row() < 0 && index.row() >= rowCount()) {
for (QModelRoleData &roleData : roleDataSpan)
roleData.clearData();
return;
}
// HACK(Nico): fetchMore likes to break with dynamically sized delegates and reuseItems
if (index.row() + 1 == rowCount() && !m_paginationInProgress)
@ -998,13 +1001,14 @@ TimelineModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSp
auto event = events.get(rowCount() - index.row() - 1);
if (!event)
if (!event) {
for (QModelRoleData &roleData : roleDataSpan)
roleData.clearData();
return;
}
for (QModelRoleData &roleData : roleDataSpan) {
int role = roleData.role();
roleData.setData(data(*event, role));
roleData.setData(data(*event, roleData.role()));
}
}
@ -1013,13 +1017,19 @@ TimelineModel::multiData(const QString &id,
const QString &relatedTo,
QModelRoleDataSpan roleDataSpan) const
{
if (id.isEmpty())
if (id.isEmpty()) {
for (QModelRoleData &roleData : roleDataSpan)
roleData.clearData();
return;
}
auto event = events.get(id.toStdString(), relatedTo.toStdString());
if (!event)
if (!event) {
for (QModelRoleData &roleData : roleDataSpan)
roleData.clearData();
return;
}
for (QModelRoleData &roleData : roleDataSpan) {
int role = roleData.role();