diff options
author | Martin Jones <martin.jones@nokia.com> | 2012-01-12 15:31:00 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-16 00:04:03 +0100 |
commit | 80d85e0017cb5cc4b0a0df6c19d4126bf5062731 (patch) | |
tree | 047aae647d7b815019623431367ad72e35f528b5 /src/quick/items/qquickitemview.cpp | |
parent | 74c390d44f133f327fc02b9561fe43a23ff4d3b3 (diff) |
Handle views with negative width/height
A view with a negative d->size() would get stuck in an infinite
loop. Also make sure item layout/visibility is updated when
the view size changes.
Change-Id: I1f16a714ecebe1c4b71902c460e27fb0f1c4406f
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src/quick/items/qquickitemview.cpp')
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index 8f46661078..bfba88afe9 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -878,6 +878,10 @@ void QQuickItemView::geometryChanged(const QRectF &newGeometry, const QRectF &ol { Q_D(QQuickItemView); d->markExtentsDirty(); + if (isComponentComplete() && d->isValid()) { + d->forceLayout = true; + polish(); + } QQuickFlickable::geometryChanged(newGeometry, oldGeometry); } @@ -1212,7 +1216,6 @@ void QQuickItemViewPrivate::init() Q_Q(QQuickItemView); QQuickItemPrivate::get(contentItem)->childrenDoNotOverlap = true; q->setFlag(QQuickItem::ItemIsFocusScope); - addItemChangeListener(this, Geometry); QObject::connect(q, SIGNAL(movementEnded()), q, SLOT(animStopped())); q->setFlickableDirection(QQuickFlickable::VerticalFlick); } @@ -1291,10 +1294,11 @@ void QQuickItemViewPrivate::mirrorChange() void QQuickItemViewPrivate::refill() { + qreal s = qMax(size(), qreal(0.)); if (isContentFlowReversed()) - refill(-position()-size(), -position()); + refill(-position()-s, -position()); else - refill(position(), position()+size()); + refill(position(), position()+s); } void QQuickItemViewPrivate::refill(qreal from, qreal to, bool doBuffer) |