diff options
author | Bea Lam <bea.lam@nokia.com> | 2012-03-06 09:39:24 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-07 06:31:56 +0100 |
commit | 22a53bcd69d39a5ea128d53231e9e51455a98cc4 (patch) | |
tree | 182a6ff3c0871285f437a8470e19d2ad4f83a2cf /src/quick/items/qquickitemview.cpp | |
parent | 83b4f5cc4f2661a41bbed4e17606a5e40bd06b7c (diff) |
Fix setting of target lists when target Transition is not set
Target items are now set from QQuickViewItem::prepareTransition()
instead of QQuickItemView and QQuickPositioner to ensure they are
for a displaced transition even if there is no matching target
transition.
Task-number: QTBUG-24535
Change-Id: I0a6c7e3c6198786527014d421b96fc562c6186dc
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickitemview.cpp')
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 516cf0c1bb..e368d1aaec 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -1664,7 +1664,7 @@ void QQuickItemViewPrivate::layout() for (QList<FxViewItem*>::Iterator it = releasePendingTransition.begin(); it != releasePendingTransition.end(); ) { FxViewItem *item = *it; - if (item->transitionRunning() || prepareNonVisibleItemTransition(item, viewBounds)) { + if (prepareNonVisibleItemTransition(item, viewBounds)) { ++it; } else { releaseItem(item); @@ -1676,7 +1676,9 @@ void QQuickItemViewPrivate::layout() visibleItems[i]->startTransition(transitioner); for (int i=0; i<releasePendingTransition.count(); i++) releasePendingTransition[i]->startTransition(transitioner); + transitioner->setPopulateTransitionEnabled(false); + transitioner->resetTargetLists(); } runDelayedRemoveTransition = false; @@ -1955,36 +1957,10 @@ void QQuickItemViewPrivate::prepareVisibleItemTransitions() if (!transitioner) return; - transitioner->addTransitionIndexes.clear(); - transitioner->addTransitionTargets.clear(); - transitioner->moveTransitionIndexes.clear(); - transitioner->moveTransitionTargets.clear(); - + // must call for every visible item to init or discard transitions QRectF viewBounds(0, position(), q->width(), q->height()); - for (int i=0; i<visibleItems.count(); i++) { - // must call for every visible item to init or discard transitions - if (!visibleItems[i]->prepareTransition(viewBounds)) - continue; - if (visibleItems[i]->isTransitionTarget) { - switch (visibleItems[i]->nextTransitionType) { - case QQuickItemViewTransitioner::NoTransition: - break; - case QQuickItemViewTransitioner::PopulateTransition: - case QQuickItemViewTransitioner::AddTransition: - transitioner->addTransitionIndexes.append(visibleItems[i]->index); - transitioner->addTransitionTargets.append(visibleItems[i]->item); - break; - case QQuickItemViewTransitioner::MoveTransition: - transitioner->moveTransitionIndexes.append(visibleItems[i]->index); - transitioner->moveTransitionTargets.append(visibleItems[i]->item); - break; - case QQuickItemViewTransitioner::RemoveTransition: - // removed targets won't be in visibleItems, handle these - // in prepareNonVisibleItemTransition() - break; - } - } - } + for (int i=0; i<visibleItems.count(); i++) + visibleItems[i]->prepareTransition(transitioner, viewBounds); } void QQuickItemViewPrivate::prepareRemoveTransitions(QHash<QQuickChangeSet::MoveKey, FxViewItem *> *removedItems) @@ -1992,10 +1968,8 @@ void QQuickItemViewPrivate::prepareRemoveTransitions(QHash<QQuickChangeSet::Move if (!transitioner) return; - transitioner->removeTransitionIndexes.clear(); - transitioner->removeTransitionTargets.clear(); - - if (transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, true)) { + if (transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, true) + || transitioner->canTransition(QQuickItemViewTransitioner::RemoveTransition, false)) { for (QHash<QQuickChangeSet::MoveKey, FxViewItem *>::Iterator it = removedItems->begin(); it != removedItems->end(); ) { bool isRemove = it.key().moveId < 0; @@ -2024,21 +1998,12 @@ bool QQuickItemViewPrivate::prepareNonVisibleItemTransition(FxViewItem *item, co if (item->nextTransitionType == QQuickItemViewTransitioner::MoveTransition) repositionItemAt(item, item->index, 0); - if (!item->prepareTransition(viewBounds)) - return false; - if (item->isTransitionTarget) { - if (item->nextTransitionType == QQuickItemViewTransitioner::MoveTransition) { - transitioner->moveTransitionIndexes.append(item->index); - transitioner->moveTransitionTargets.append(item->item); - } else if (item->nextTransitionType == QQuickItemViewTransitioner::RemoveTransition) { - transitioner->removeTransitionIndexes.append(item->index); - transitioner->removeTransitionTargets.append(item->item); - } + if (item->prepareTransition(transitioner, viewBounds)) { + item->releaseAfterTransition = true; + return true; } - - item->releaseAfterTransition = true; - return true; + return false; } void QQuickItemViewPrivate::viewItemTransitionFinished(QQuickViewItem *i) |