diff options
Diffstat (limited to 'src/quick/items/qquickitemview_p_p.h')
-rw-r--r-- | src/quick/items/qquickitemview_p_p.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h index a448cf9a38..0bc2a6b768 100644 --- a/src/quick/items/qquickitemview_p_p.h +++ b/src/quick/items/qquickitemview_p_p.h @@ -92,7 +92,7 @@ public: int itemCount; int newCurrentIndex; QQmlChangeSet pendingChanges; - QHash<QQmlChangeSet::MoveKey, FxViewItem *> removedItems; + QMultiHash<QQmlChangeSet::MoveKey, FxViewItem *> removedItems; bool active : 1; bool currentChanged : 1; @@ -174,7 +174,7 @@ public: void mirrorChange() override; FxViewItem *createItem(int modelIndex,QQmlIncubator::IncubationMode incubationMode = QQmlIncubator::AsynchronousIfNested); - virtual bool releaseItem(FxViewItem *item); + virtual bool releaseItem(FxViewItem *item, QQmlInstanceModel::ReusableFlag reusableFlag); QQuickItem *createHighlightItem() const; QQuickItem *createComponentItem(QQmlComponent *component, qreal zValue, bool createDefault = false) const; @@ -203,7 +203,7 @@ public: void createTransitioner(); void prepareVisibleItemTransitions(); - void prepareRemoveTransitions(QHash<QQmlChangeSet::MoveKey, FxViewItem *> *removedItems); + void prepareRemoveTransitions(QMultiHash<QQmlChangeSet::MoveKey, FxViewItem *> *removedItems); bool prepareNonVisibleItemTransition(FxViewItem *item, const QRectF &viewBounds); void viewItemTransitionFinished(QQuickItemViewTransitionableItem *item) override; @@ -238,15 +238,17 @@ public: q->polish(); } - void releaseVisibleItems() { + void releaseVisibleItems(QQmlInstanceModel::ReusableFlag reusableFlag) { // make a copy and clear the visibleItems first to avoid destroyed // items being accessed during the loop (QTBUG-61294) const QList<FxViewItem *> oldVisible = visibleItems; visibleItems.clear(); for (FxViewItem *item : oldVisible) - releaseItem(item); + releaseItem(item, reusableFlag); } + virtual QQuickItemViewAttached *getAttachedObject(const QObject *) const { return nullptr; } + QPointer<QQmlInstanceModel> model; QVariant modelVariant; int itemCount; @@ -288,6 +290,11 @@ public: QQmlComponent *footerComponent; FxViewItem *footer; + // Reusing delegate items cannot be on by default for backwards compatibility. + // Reusing an item will e.g mean that Component.onCompleted will only be called for an + // item when it's created and not when it's reused, which will break legacy applications. + QQmlInstanceModel::ReusableFlag reusableFlag = QQmlInstanceModel::NotReusable; + struct MovedItem { FxViewItem *item; QQmlChangeSet::MoveKey moveKey; |