diff options
author | Andrew den Exter <[email protected]> | 2012-06-26 13:13:11 +1000 |
---|---|---|
committer | Qt by Nokia <[email protected]> | 2012-06-26 08:08:33 +0200 |
commit | 3bb4880d63e0ebc972d500d3c7538127cd709a5d (patch) | |
tree | 802038e59bba2d265a57ff18739278a8f64b529b /src/quick/items/qquicklistview.cpp | |
parent | 4089c2bbc51717a642f17c76c17c9ca73e180f00 (diff) |
Fix section delegates not updating when changed.
Delete all allocated section items before doing an update when the
section delegate is changed.
Task-number: QTBUG-24899
Change-Id: I09dc7a1c602a49ad7bb37512a7e5116392259457
Reviewed-by: Martin Jones <[email protected]>
Diffstat (limited to 'src/quick/items/qquicklistview.cpp')
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 062cd58bbd..d67e02e8c2 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -113,6 +113,7 @@ public: virtual void updateSections(); QQuickItem *getSectionItem(const QString §ion); void releaseSectionItem(QQuickItem *item); + void releaseSectionItems(); void updateInlineSection(FxListItemSG *); void updateCurrentSection(); void updateStickySections(); @@ -209,6 +210,8 @@ void QQuickViewSection::setCriteria(QQuickViewSection::SectionCriteria criteria) void QQuickViewSection::setDelegate(QQmlComponent *delegate) { if (delegate != m_delegate) { + if (m_delegate) + m_view->releaseSectionItems(); m_delegate = delegate; emit delegateChanged(); m_view->updateSections(); @@ -980,6 +983,24 @@ void QQuickListViewPrivate::releaseSectionItem(QQuickItem *item) delete item; } + +void QQuickListViewPrivate::releaseSectionItems() +{ + for (int i = 0; i < visibleItems.count(); ++i) { + FxListItemSG *listItem = static_cast<FxListItemSG *>(visibleItems.at(i)); + if (listItem->section()) { + qreal pos = listItem->position(); + releaseSectionItem(listItem->section()); + listItem->setSection(0); + listItem->setPosition(pos); + } + } + for (int i = 0; i < sectionCacheSize; ++i) { + delete sectionCache[i]; + sectionCache[i] = 0; + } +} + void QQuickListViewPrivate::updateInlineSection(FxListItemSG *listItem) { if (!sectionCriteria || !sectionCriteria->delegate()) |