diff options
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 0211e9f285..955e1f1e00 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -1319,10 +1319,10 @@ void QQuickListViewPrivate::updateFooter() } FxListItemSG *listItem = static_cast<FxListItemSG*>(footer); - if (visibleItems.count()) { - if (footerPositioning == QQuickListView::OverlayFooter) { - listItem->setPosition(isContentFlowReversed() ? -position() - footerSize() : position() + size() - footerSize()); - } else if (footerPositioning == QQuickListView::PullBackFooter) { + if (footerPositioning == QQuickListView::OverlayFooter) { + listItem->setPosition(isContentFlowReversed() ? -position() - footerSize() : position() + size() - footerSize()); + } else if (visibleItems.count()) { + if (footerPositioning == QQuickListView::PullBackFooter) { qreal viewPos = isContentFlowReversed() ? -position() : position() + size(); qreal clampedPos = qBound(originPosition() - footerSize() + size(), listItem->position(), lastPosition()); listItem->setPosition(qBound(viewPos - footerSize(), clampedPos, viewPos)); @@ -1358,26 +1358,24 @@ void QQuickListViewPrivate::updateHeader() } FxListItemSG *listItem = static_cast<FxListItemSG*>(header); - if (listItem) { - if (visibleItems.count()) { - if (headerPositioning == QQuickListView::OverlayHeader) { - listItem->setPosition(isContentFlowReversed() ? -position() - size() : position()); - } else if (headerPositioning == QQuickListView::PullBackHeader) { - qreal viewPos = isContentFlowReversed() ? -position() - size() : position(); - qreal clampedPos = qBound(originPosition() - headerSize(), listItem->position(), lastPosition() - headerSize() - size()); - listItem->setPosition(qBound(viewPos - headerSize(), clampedPos, viewPos)); + if (headerPositioning == QQuickListView::OverlayHeader) { + listItem->setPosition(isContentFlowReversed() ? -position() - size() : position()); + } else if (visibleItems.count()) { + if (headerPositioning == QQuickListView::PullBackHeader) { + qreal viewPos = isContentFlowReversed() ? -position() - size() : position(); + qreal clampedPos = qBound(originPosition() - headerSize(), listItem->position(), lastPosition() - headerSize() - size()); + listItem->setPosition(qBound(viewPos - headerSize(), clampedPos, viewPos)); + } else { + qreal startPos = originPosition(); + if (visibleIndex == 0) { + listItem->setPosition(startPos - headerSize()); } else { - qreal startPos = originPosition(); - if (visibleIndex == 0) { + if (position() <= startPos || listItem->position() > startPos - headerSize()) listItem->setPosition(startPos - headerSize()); - } else { - if (position() <= startPos || listItem->position() > startPos - headerSize()) - listItem->setPosition(startPos - headerSize()); - } } - } else { - listItem->setPosition(-headerSize()); } + } else { + listItem->setPosition(-headerSize()); } if (created) @@ -2840,8 +2838,15 @@ void QQuickListView::viewportMoved(Qt::Orientations orient) { Q_D(QQuickListView); QQuickItemView::viewportMoved(orient); - if (!d->itemCount) + + if (!d->itemCount) { + if (d->hasStickyHeader()) + d->updateHeader(); + if (d->hasStickyFooter()) + d->updateFooter(); return; + } + // Recursion can occur due to refill changing the content size. if (d->inViewportMoved) return; |