doTransition = (nextTransitionType == QQuickItemViewTransitioner::AddTransition)
? viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()))
: viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height()));
- if (!doTransition)
- item->setPos(nextTransitionTo);
} else {
+ // do transition if moving from or into visible area
if (viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height()))
|| viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()))) {
doTransition = transitionWillChangePosition();
- } else {
- item->setPos(nextTransitionTo);
}
}
break;
doTransition = viewBounds.isNull()
|| viewBounds.intersects(QRectF(item->x(), item->y(), item->width(), item->height()))
|| viewBounds.intersects(QRectF(nextTransitionTo.x(), nextTransitionTo.y(), item->width(), item->height()));
- if (!doTransition)
- item->setPos(nextTransitionTo);
}
break;
}
- if (!doTransition)
+ if (!doTransition) {
+ if (transition)
+ transition->cancel();
+ item->setPos(nextTransitionTo);
resetTransitionData();
+ }
return doTransition;
}
// interrupting transitions will still produce the correct result)
property int timeBetweenActions: duration / 2
- property int duration: 300
+ property int duration: 100
property int count: grid.count
void tst_QQuickGridView::multipleChanges()
{
- QSKIP("QTBUG-24523");
-
QFETCH(int, startCount);
QFETCH(QList<ListChange>, changes);
QFETCH(int, newCount);
int timeBetweenActions = canvas->rootObject()->property("timeBetweenActions").toInt();
- QList<QPair<QString, QString> > targetItems;
for (int i=0; i<changes.count(); i++) {
switch (changes[i].type) {
case ListChange::Inserted:
{
+ QList<QPair<QString, QString> > targetItems;
for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
targetItems << qMakePair(QString("new item %1").arg(j), QString::number(j));
model.insertItems(changes[i].index, targetItems);
QTRY_COMPARE(model.count(), gridview->count());
- QTRY_VERIFY(gridview->property("runningAddTargets").toBool());
- QTRY_VERIFY(gridview->property("runningAddDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!gridview->property("runningAddTargets").toBool());
QTRY_VERIFY(!gridview->property("runningAddDisplaced").toBool());
break;
}
case ListChange::Removed:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.removeItems(changes[i].index, changes[i].count);
QTRY_COMPARE(model.count(), gridview->count());
- QTRY_VERIFY(gridview->property("runningRemoveTargets").toBool());
- QTRY_VERIFY(gridview->property("runningRemoveDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!gridview->property("runningRemoveTargets").toBool());
QTRY_VERIFY(!gridview->property("runningRemoveDisplaced").toBool());
}
break;
case ListChange::Moved:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.moveItems(changes[i].index, changes[i].to, changes[i].count);
- QTRY_VERIFY(gridview->property("runningMoveTargets").toBool());
- QTRY_VERIFY(gridview->property("runningMoveDisplaced").toBool());
+ QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
if (i == changes.count() - 1) {
QTRY_VERIFY(!gridview->property("runningMoveTargets").toBool());
QTRY_VERIFY(!gridview->property("runningMoveDisplaced").toBool());
// interrupting transitions will still produce the correct result)
property int timeBetweenActions: duration / 2
- property int duration: 300
+ property int duration: 100
property int count: list.count
void tst_QQuickListView::multipleTransitions()
{
- QSKIP("QTBUG-24523");
-
// Tests that if you interrupt a transition in progress with another action that
// cancels the previous transition, the resulting items are still placed correctly.
int timeBetweenActions = canvas->rootObject()->property("timeBetweenActions").toInt();
- QList<QPair<QString, QString> > targetItems;
for (int i=0; i<changes.count(); i++) {
switch (changes[i].type) {
case ListChange::Inserted:
{
+ QList<QPair<QString, QString> > targetItems;
for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
targetItems << qMakePair(QString("new item %1").arg(j), QString::number(j));
model.insertItems(changes[i].index, targetItems);
QTRY_COMPARE(model.count(), listview->count());
- QTRY_VERIFY(listview->property("runningAddTargets").toBool());
- QTRY_VERIFY(listview->property("runningAddDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningAddTargets").toBool());
QTRY_VERIFY(!listview->property("runningAddDisplaced").toBool());
break;
}
case ListChange::Removed:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.removeItems(changes[i].index, changes[i].count);
QTRY_COMPARE(model.count(), listview->count());
- QTRY_VERIFY(listview->property("runningRemoveTargets").toBool());
- QTRY_VERIFY(listview->property("runningRemoveDisplaced").toBool());
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningRemoveTargets").toBool());
QTRY_VERIFY(!listview->property("runningRemoveDisplaced").toBool());
}
break;
case ListChange::Moved:
- for (int j=changes[i].index; j<changes[i].index + changes[i].count; ++j)
- targetItems << qMakePair(model.name(i), model.number(i));
model.moveItems(changes[i].index, changes[i].to, changes[i].count);
- QTRY_VERIFY(listview->property("runningMoveTargets").toBool());
- QTRY_VERIFY(listview->property("runningMoveDisplaced").toBool());
+ QTRY_COMPARE(QQuickItemPrivate::get(listview)->polishScheduled, false);
if (i == changes.count() - 1) {
QTRY_VERIFY(!listview->property("runningMoveTargets").toBool());
QTRY_VERIFY(!listview->property("runningMoveDisplaced").toBool());