@@ -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>
@@ -757,8 +758,6 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText, b
758 QQmlContext *creationContext = m_sectionDelegate->creationContext();
759 QQmlContext *creationContext = m_sectionDelegate->creationContext();
759 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
760 QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this));
760− context->setContextProperty(QStringLiteral("section"), sectionText);
761− context->setContextProperty(QStringLiteral("delegateIndex"), -1);
762 QObject *nobj = m_sectionDelegate->beginCreate(context);
761 QObject *nobj = m_sectionDelegate->beginCreate(context);
763 if (nobj) {
762 if (nobj) {
764 QQml_setParent_noEvent(context, nobj);
763 QQml_setParent_noEvent(context, nobj);
@@ -766,6 +765,8 @@ QQuickItem *ListViewWithPageHeader::getSectionItem(const QString §ionText, b
766 if (!sectionItem) {
765 if (!sectionItem) {
767 delete nobj;
766 delete nobj;
768+ sectionItem->setProperty("text", sectionText);
769+ sectionItem->setProperty("delegateIndex", -1);
769 sectionItem->setZ(2);
770 sectionItem->setZ(2);
770 QQml_setParent_noEvent(sectionItem, m_clipItem);
771 QQml_setParent_noEvent(sectionItem, m_clipItem);
771 sectionItem->setParentItem(m_clipItem);
772 sectionItem->setParentItem(m_clipItem);
@@ -801,8 +802,7 @@ void ListViewWithPageHeader::updateSectionItem(int modelIndex)
801 if (!item->sectionItem()) {
802 if (!item->sectionItem()) {
802 item->setSectionItem(getSectionItem(sectionText));
803 item->setSectionItem(getSectionItem(sectionText));
804− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
805+ item->sectionItem()->setProperty("text", sectionText);
805− context->setContextProperty(QStringLiteral("section"), sectionText);
808 if (item->sectionItem()) {
808 if (item->sectionItem()) {
@@ -923,8 +923,7 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
923 polish();
923 polish();
925 if (listItem->sectionItem()) {
925 if (listItem->sectionItem()) {
926− QQmlContext *context = QQmlEngine::contextForObject(listItem->sectionItem())->parentContext();
927− context->setContextProperty(QStringLiteral("delegateIndex"), modelIndex);
926+ listItem->sectionItem()->setProperty("delegateIndex", modelIndex);
929 adjustMinYExtent();
928 adjustMinYExtent();
930 m_contentHeightDirty = true;
929 m_contentHeightDirty = true;
@@ -948,9 +947,10 @@ void ListViewWithPageHeader::itemCreated(int modelIndex, QObject *object)
950 item->setParentItem(m_clipItem);
949 item->setParentItem(m_clipItem);
950+ // FIXME Why do we need the refreshExpressions call?
951 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
951 QQmlContext *context = QQmlEngine::contextForObject(item)->parentContext();
952− context->setContextProperty(QStringLiteral("ListViewWithPageHeader"), this);
952+ QQmlContextPrivate::get(context)->data->refreshExpressions();
953− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
953+ item->setProperty("heightToClip", QVariant::fromValue<int>(0));
954 if (modelIndex == m_asyncRequestedIndex) {
954 if (modelIndex == m_asyncRequestedIndex) {
955 createItem(modelIndex, false);
955 createItem(modelIndex, false);
956 refill();
956 refill();
@@ -1116,8 +1116,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQmlChangeSet &changeSet, bool
1116 for (int i = 0; i < m_visibleItems.count(); ++i) {
1116 for (int i = 0; i < m_visibleItems.count(); ++i) {
1117 ListItem *item = m_visibleItems[i];
1117 ListItem *item = m_visibleItems[i];
1118 if (item->sectionItem()) {
1118 if (item->sectionItem()) {
1119− QQmlContext *context = QQmlEngine::contextForObject(item->sectionItem())->parentContext();
1120− context->setContextProperty(QStringLiteral("delegateIndex"), m_firstVisibleIndex + i);
1119+ item->sectionItem()->setProperty("delegateIndex", m_firstVisibleIndex + i);
@@ -1287,8 +1286,7 @@ void ListViewWithPageHeader::layout()
1287 } else {
1286 } else {
1288 // Update the top sticky section header
1287 // Update the top sticky section header
1289 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1288 const QString section = m_delegateModel->stringValue(modelIndex, m_sectionProperty);
1290− QQmlContext *context = QQmlEngine::contextForObject(m_topSectionItem)->parentContext();
1289+ m_topSectionItem->setProperty("text", section);
1291− context->setContextProperty(QStringLiteral("section"), section);
1293 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1291 QQuickItemPrivate::get(m_topSectionItem)->setCulled(false);
1294 m_topSectionItem->setY(topSectionStickPos);
1292 m_topSectionItem->setY(topSectionStickPos);
@@ -1300,19 +1298,18 @@ void ListViewWithPageHeader::layout()
1301 delegateIndex--;
1299 delegateIndex--;
1303− context->setContextProperty(QStringLiteral("delegateIndex"), delegateIndex);
1301+ m_topSectionItem->setProperty("delegateIndex", delegateIndex);
1304 if (item->sectionItem()) {
1302 if (item->sectionItem()) {
1305 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1303 QQuickItemPrivate::get(item->sectionItem())->setCulled(true);
1310− QQmlContext *context = QQmlEngine::contextForObject(item->m_item)->parentContext();
1311 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1308 const qreal clipFrom = visibleFrom + (!item->sectionItem() && m_topSectionItem && !QQuickItemPrivate::get(m_topSectionItem)->culled ? m_topSectionItem->height() : 0);
1312 if (!cull && pos < clipFrom) {
1309 if (!cull && pos < clipFrom) {
1313− context->setContextProperty(QStringLiteral("heightToClip"), clipFrom - pos);
1310+ item->m_item->setProperty("heightToClip", clipFrom - pos);
1314 } else {
1311 } else {
1315− context->setContextProperty(QStringLiteral("heightToClip"), QVariant::fromValue<int>(0));
1312+ item->m_item->setProperty("heightToClip", QVariant::fromValue<int>(0));
1317// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1314// qDebug() << "ListViewWithPageHeader::layout" << item->m_item;
1318 pos += item->height();
1315 pos += item->height();