diff --git a/src/timeline/EventDelegateChooser.cpp b/src/timeline/EventDelegateChooser.cpp index 2b143b0fc3d59846d890e5498350dbd4c879ec52..99a4cf3a44cef8dc5719347dc9b2f17029132dba 100644 --- a/src/timeline/EventDelegateChooser.cpp +++ b/src/timeline/EventDelegateChooser.cpp @@ -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 diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index e8b5d40eaeb8a4a1d72ce00a98a28d2a50c2001d..e8a0a507bda2934b7947e366cc2efd4413e7b02d 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -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();