@@ -97,6 +97,7 @@
97#include <qqmlengine.h>
97#include <qqmlengine.h>
98#pragma GCC diagnostic push
98#pragma GCC diagnostic push
99#pragma GCC diagnostic ignored "-pedantic"
99#pragma GCC diagnostic ignored "-pedantic"
100+#include <private/qqmlcontext_p.h>
100#include <private/qqmldelegatemodel_p.h>
101#include <private/qqmldelegatemodel_p.h>
101#include <private/qqmlglobal_p.h>
102#include <private/qqmlglobal_p.h>
102#include <private/qquickitem_p.h>
103#include <private/qquickitem_p.h>
@@ -750,8 +751,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText)
751 QQmlContext *creationContext = m_sectionDelegate->creationContext();
752 QQmlContext *creationContext = m_sectionDelegate->creationContext();
752 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
753 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
753− context->setContextProperty(QStringLiteral("section"), sectionText);
754− context->setContextProperty(QStringLiteral("delegateIndex"), -1);
755 QObject *nobj = m_sectionDelegate->beginCreate(context);
754 QObject *nobj = m_sectionDelegate->beginCreate(context);
756 if (nobj) {
755 if (nobj) {
757 QQml_setParent_noEvent(context, nobj);
756 QQml_setParent_noEvent(context, nobj);
@@ -759,6 +758,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText)
759 if (!sectionItem) {
758 if (!sectionItem) {
760 delete nobj;
759 delete nobj;
761+ sectionItem->setProperty("text", sectionText);
762+ sectionItem->setProperty("delegateIndex", -1);
762 sectionItem->setZ(2);
763 sectionItem->setZ(2);
763 QQml_setParent_noEvent(sectionItem, m_clipItem);
764 QQml_setParent_noEvent(sectionItem, m_clipItem);
764 sectionItem->setParentItem(m_clipItem);
765 sectionItem->setParentItem(m_clipItem);
@@ -792,8 +793,7 @@ void ListViewWithPageHeader::updateSectionItem(int modelIndex)
792 if (!item->sectionItem()) {
793 if (!item->sectionItem()) {
793 item->setSectionItem(getSectionItem(sectionText));
794 item->setSectionItem(getSectionItem(sectionText));
795− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
796+ item->sectionItem()->setProperty("text", sectionText);
796− context->setContextProperty(QStringLiteral("section"), sectionText);
799 if (item->sectionItem()) {
799 if (item->sectionItem()) {
@@ -914,8 +914,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
914 polish();
914 polish();
916 if (listItem->sectionItem()) {
916 if (listItem->sectionItem()) {
917− QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
918− context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
917+ listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
920 adjustMinYExtent();
919 adjustMinYExtent();
921 m_contentHeightDirty = true;
920 m_contentHeightDirty = true;
@@ -939,9 +938,10 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
941 item->setParentItem(m_clipItem);
940 item->setParentItem(m_clipItem);
941+ // FIXME Why do we need the refreshExpressions call?
942 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
942 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
943− context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
943+ QQmlContextPrivate::get(context)->data->refreshExpressions();
944− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
944+ item->setProperty("heightToClip", QVariant::fromValue<int>(0));
945 if (modelIndex == m_asyncRequestedIndex) {
945 if (modelIndex == m_asyncRequestedIndex) {
946 createItem(modelIndex, false);
946 createItem(modelIndex, false);
947 refill();
947 refill();
@@ -1107,8 +1107,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1107 for (int i = 0; i < m_visibleItems.count(); ++i) {
1107 for (int i = 0; i < m_visibleItems.count(); ++i) {
1108 ListItem *item = m_visibleItems[i];
1108 ListItem *item = m_visibleItems[i];
1109 if (item->sectionItem()) {
1109 if (item->sectionItem()) {
1110− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1111− context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1110+ item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
@@ -1270,8 +1269,7 @@ void ListViewWithPageHeader::layout()
1270 } else {
1269 } else {
1271 // Update the top sticky section header
1270 // Update the top sticky section header
1272 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1271 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1273− QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1272+ m_topSectionItem->setProperty("text", section);
1274− context->setContextProperty(QStringLiteral("section"), section);
1276 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1274 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1277 m_topSectionItem->setY(topSectionStickPos);
1275 m_topSectionItem->setY(topSectionStickPos);
@@ -1283,19 +1281,18 @@ void ListViewWithPageHeader::layout()
1284 delegateIndex--;
1282 delegateIndex--;
1286− context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1284+ m_topSectionItem->setProperty("delegateIndex", delegateIndex);
1287 if (item->sectionItem()) {
1285 if (item->sectionItem()) {
1288 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1286 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1293− QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1294 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1291 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1295 if (!cull && pos < clipFrom) {
1292 if (!cull && pos < clipFrom) {
1296− context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1293+ item->m_item->setProperty("heightToClip", clipFrom - pos);
1297 } else {
1294 } else {
1298− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1295+ item->m_item->setProperty("heightToClip", QVariant::fromValue<int>(0));
1300// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1297// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1301 pos += item->height();
1298 pos += item->height();