aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquickgridview.cpp5
-rw-r--r--src/quick/items/qquickitemview.cpp1
-rw-r--r--src/quick/items/qquicklistview.cpp13
3 files changed, 15 insertions, 4 deletions
diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp
index 605e37e29f..b33f7d2a4d 100644
--- a/src/quick/items/qquickgridview.cpp
+++ b/src/quick/items/qquickgridview.cpp
@@ -542,6 +542,9 @@ void QQuickGridViewPrivate::updateViewport()
void QQuickGridViewPrivate::layoutVisibleItems()
{
if (visibleItems.count()) {
+ const qreal from = isContentFlowReversed() ? -position() - size() : position();
+ const qreal to = isContentFlowReversed() ? -position() : position() + size();
+
FxGridItemSG *firstItem = static_cast<FxGridItemSG*>(visibleItems.first());
qreal rowPos = firstItem->rowPos();
qreal colPos = firstItem->colPos();
@@ -549,6 +552,7 @@ void QQuickGridViewPrivate::layoutVisibleItems()
if (colPos != col * colSize()) {
colPos = col * colSize();
firstItem->setPosition(colPos, rowPos);
+ firstItem->item->setVisible(rowPos + rowSize() >= from && rowPos <= to);
}
for (int i = 1; i < visibleItems.count(); ++i) {
FxGridItemSG *item = static_cast<FxGridItemSG*>(visibleItems.at(i));
@@ -558,6 +562,7 @@ void QQuickGridViewPrivate::layoutVisibleItems()
}
colPos = col * colSize();
item->setPosition(colPos, rowPos);
+ item->item->setVisible(rowPos + rowSize() >= from && rowPos <= to);
}
}
}
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp
index edbe2a5d06..340206b9dc 100644
--- a/src/quick/items/qquickitemview.cpp
+++ b/src/quick/items/qquickitemview.cpp
@@ -1651,6 +1651,7 @@ void QQuickItemViewPrivate::releaseItem(FxViewItem *item)
itemPrivate->removeItemChangeListener(this, QQuickItemPrivate::Geometry);
if (model->release(item->item) == 0) {
// item was not destroyed, and we no longer reference it.
+ item->item->setVisible(false);
unrequestedItems.insert(item->item, model->indexOf(item->item, q));
}
delete item;
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp
index 88a38553ac..ab568dd04a 100644
--- a/src/quick/items/qquicklistview.cpp
+++ b/src/quick/items/qquicklistview.cpp
@@ -692,12 +692,18 @@ void QQuickListViewPrivate::visibleItemsChanged()
void QQuickListViewPrivate::layoutVisibleItems()
{
if (!visibleItems.isEmpty()) {
- bool fixedCurrent = currentItem && (*visibleItems.constBegin())->item == currentItem->item;
- qreal sum = (*visibleItems.constBegin())->size();
- qreal pos = (*visibleItems.constBegin())->position() + (*visibleItems.constBegin())->size() + spacing;
+ const qreal from = isContentFlowReversed() ? -position() - size() : position();
+ const qreal to = isContentFlowReversed() ? -position() : position() + size();
+
+ FxViewItem *firstItem = *visibleItems.constBegin();
+ bool fixedCurrent = currentItem && firstItem->item == currentItem->item;
+ qreal sum = firstItem->size();
+ qreal pos = firstItem->position() + firstItem->size() + spacing;
+ firstItem->item->setVisible(firstItem->endPosition() >= from && firstItem->position() <= to);
for (int i=1; i < visibleItems.count(); ++i) {
FxListItemSG *item = static_cast<FxListItemSG*>(visibleItems.at(i));
item->setPosition(pos);
+ item->item->setVisible(item->endPosition() >= from && item->position() <= to);
pos += item->size() + spacing;
sum += item->size();
fixedCurrent = fixedCurrent || (currentItem && item->item == currentItem->item);
@@ -2373,7 +2379,6 @@ bool QQuickListViewPrivate::applyInsertionChange(const QDeclarativeChangeSet::In
int modelIndex = change.index;
int count = change.count;
-
qreal tempPos = isRightToLeft() ? -position()-size() : position();
int index = visibleItems.count() ? mapFromModel(modelIndex) : 0;