aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquickitemview.cpp6
-rw-r--r--src/quick/items/qquickitemviewtransition.cpp4
-rw-r--r--src/quick/items/qquickitemviewtransition_p.h2
-rw-r--r--tests/auto/quick/qquickgridview/tst_qquickgridview.cpp44
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp33
5 files changed, 41 insertions, 48 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index 95c7ed5f78..2a26e853cb 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1752,8 +1752,10 @@ void QQuickItemViewPrivate::layout()
forceLayout = false;
if (transitioner && transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) {
- for (int i=0; i<visibleItems.count(); i++)
- visibleItems.at(i)->transitionNextReposition(transitioner, QQuickItemViewTransitioner::PopulateTransition, true);
+ for (int i=0; i<visibleItems.count(); i++) {
+ if (!visibleItems.at(i)->transitionScheduledOrRunning())
+ visibleItems.at(i)->transitionNextReposition(transitioner, QQuickItemViewTransitioner::PopulateTransition, true);
+ }
}
layoutVisibleItems();
diff --git a/src/quick/items/qquickitemviewtransition.cpp b/src/quick/items/qquickitemviewtransition.cpp
index cdc1c19518..c680945e04 100644
--- a/src/quick/items/qquickitemviewtransition.cpp
+++ b/src/quick/items/qquickitemviewtransition.cpp
@@ -189,8 +189,6 @@ bool QQuickItemViewTransitioner::canTransition(QQuickItemViewTransitioner::Trans
return usePopulateTransition
&& populateTransition && populateTransition->enabled();
case AddTransition:
- if (usePopulateTransition)
- return false;
if (asTarget)
return addTransition && addTransition->enabled();
else
@@ -437,7 +435,7 @@ bool QQuickItemViewTransitionableItem::prepareTransition(QQuickItemViewTransitio
}
case QQuickItemViewTransitioner::PopulateTransition:
{
- doTransition = true;
+ doTransition = viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()));
break;
}
case QQuickItemViewTransitioner::AddTransition:
diff --git a/src/quick/items/qquickitemviewtransition_p.h b/src/quick/items/qquickitemviewtransition_p.h
index 0ec87ba51c..76f5cc9c59 100644
--- a/src/quick/items/qquickitemviewtransition_p.h
+++ b/src/quick/items/qquickitemviewtransition_p.h
@@ -90,6 +90,8 @@ public:
const QList<QObject *> &targetItems(QQuickItemViewTransitioner::TransitionType type) const;
inline void setPopulateTransitionEnabled(bool b) { usePopulateTransition = b; }
+ inline bool populateTransitionEnabled() const { return usePopulateTransition; }
+
inline void setChangeListener(QQuickItemViewTransitionChangeListener *obj) { changeListener = obj; }
QSet<QQuickItemViewTransitionJob *> runningJobs;
diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
index f5019fce52..d39fbe5e29 100644
--- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
+++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp
@@ -4531,37 +4531,37 @@ void tst_QQuickGridView::populateTransitions()
QQuickItem *contentItem = gridview->contentItem();
QVERIFY(contentItem);
- if (staticallyPopulate || dynamicallyPopulate) {
- // check the populate transition is run
- if (usePopulateTransition) {
- QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 19);
- } else {
- QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
- QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
- }
+ // check the populate transition is run
+ if (staticallyPopulate && usePopulateTransition) {
+ QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 18);
QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
+ } else if (dynamicallyPopulate) {
+ QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
+ QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 18);
} else {
QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
+ QCOMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
+ QCOMPARE(gridview->property("countAddTransitions").toInt(), 0);
}
int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
- QCOMPARE(item->x(), (i%3)*80.0);
- QCOMPARE(item->y(), (i/3)*60.0);
+ QTRY_COMPARE(item->x(), (i%3)*80.0);
+ QTRY_COMPARE(item->y(), (i/3)*60.0);
QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
QVERIFY(name != 0);
QTRY_COMPARE(name->text(), model.name(i));
}
+ gridview->setProperty("countPopulateTransitions", 0);
+ gridview->setProperty("countAddTransitions", 0);
+
// add an item and check this is done with add transition, not populate
model.insertItem(0, "another item", "");
QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 1);
- QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(),
- (usePopulateTransition && (staticallyPopulate || dynamicallyPopulate)) ? 19 : 0);
+ QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), 0);
// clear the model
canvas->rootContext()->setContextProperty("testModel", QVariant());
@@ -4577,17 +4577,15 @@ void tst_QQuickGridView::populateTransitions()
canvas->rootContext()->setContextProperty("testModel", &model);
QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
- QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 19 : 0);
+ QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 18 : 0);
QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
- QCOMPARE(item->x(), (i%3)*80.0);
- QCOMPARE(item->y(), (i/3)*60.0);
+ QTRY_COMPARE(item->x(), (i%3)*80.0);
+ QTRY_COMPARE(item->y(), (i/3)*60.0);
QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
QVERIFY(name != 0);
QTRY_COMPARE(name->text(), model.name(i));
@@ -4597,17 +4595,15 @@ void tst_QQuickGridView::populateTransitions()
gridview->setProperty("countPopulateTransitions", 0);
gridview->setProperty("countAddTransitions", 0);
model.reset();
- QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 19 : 0);
+ QTRY_COMPARE(gridview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 18 : 0);
QTRY_COMPARE(gridview->property("countAddTransitions").toInt(), 0);
itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, gridview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
- QCOMPARE(item->x(), (i%3)*80.0);
- QCOMPARE(item->y(), (i/3)*60.0);
+ QTRY_COMPARE(item->x(), (i%3)*80.0);
+ QTRY_COMPARE(item->y(), (i/3)*60.0);
QQuickText *name = findItem<QQuickText>(contentItem, "textName", i);
QVERIFY(name != 0);
QTRY_COMPARE(name->text(), model.name(i));
diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
index 3369cf7933..e4d81d9fb0 100644
--- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
+++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp
@@ -5260,22 +5260,19 @@ void tst_QQuickListView::populateTransitions()
QQuickItem *contentItem = listview->contentItem();
QVERIFY(contentItem);
- if (staticallyPopulate || dynamicallyPopulate) {
- // check the populate transition is run
- if (usePopulateTransition) {
- QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 17);
- } else {
- QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
- QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
- }
+ if (staticallyPopulate && usePopulateTransition) {
+ QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 16);
QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
+ } else if (dynamicallyPopulate) {
+ QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
+ QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 16);
} else {
QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
+ QCOMPARE(listview->property("countPopulateTransitions").toInt(), 0);
+ QCOMPARE(listview->property("countAddTransitions").toInt(), 0);
}
int itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
@@ -5286,11 +5283,13 @@ void tst_QQuickListView::populateTransitions()
QTRY_COMPARE(name->text(), model.name(i));
}
- // add an item and check this is done with add trantion, not populate
+ listview->setProperty("countPopulateTransitions", 0);
+ listview->setProperty("countAddTransitions", 0);
+
+ // add an item and check this is done with add transition, not populate
model.insertItem(0, "another item", "");
QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 1);
- QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(),
- (usePopulateTransition && (staticallyPopulate || dynamicallyPopulate)) ? 17 : 0);
+ QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), 0);
// clear the model
canvas->rootContext()->setContextProperty("testModel", QVariant());
@@ -5304,12 +5303,10 @@ void tst_QQuickListView::populateTransitions()
for (int i = 0; i < 30; i++)
model.addItem("item" + QString::number(i), "");
canvas->rootContext()->setContextProperty("testModel", &model);
- QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 17 : 0);
+ QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 16 : 0);
QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));
@@ -5324,12 +5321,10 @@ void tst_QQuickListView::populateTransitions()
listview->setProperty("countPopulateTransitions", 0);
listview->setProperty("countAddTransitions", 0);
model.reset();
- QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 17 : 0);
+ QTRY_COMPARE(listview->property("countPopulateTransitions").toInt(), usePopulateTransition ? 16 : 0);
QTRY_COMPARE(listview->property("countAddTransitions").toInt(), 0);
itemCount = findItems<QQuickItem>(contentItem, "wrapper").count();
- if (usePopulateTransition)
- QCOMPARE(itemCount, listview->property("countPopulateTransitions").toInt());
for (int i=0; i < model.count() && i < itemCount; ++i) {
QQuickItem *item = findItem<QQuickItem>(contentItem, "wrapper", i);
QVERIFY2(item, QTest::toString(QString("Item %1 not found").arg(i)));