From 1deba22774e59458dc2e485f1cdf8f5b547d2941 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Fri, 25 May 2012 17:33:02 +1000 Subject: Don't override "z" bindings for header and footer Headers and footers are given a default z value. This value should be set between Component beginCreate() and completeCreate() to avoid overwriting any binding in the header or footer item that has already set the 'z' value. Change-Id: I8e3ee97232d99500a32f2d77d2b663016eb404f7 Reviewed-by: Martin Jones --- src/quick/items/qquickgridview.cpp | 6 ++---- src/quick/items/qquickitemview.cpp | 9 ++++++--- src/quick/items/qquickitemview_p_p.h | 2 +- src/quick/items/qquicklistview.cpp | 6 ++---- 4 files changed, 11 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/quick/items/qquickgridview.cpp b/src/quick/items/qquickgridview.cpp index d7fa0ed5d4..61bd20200f 100644 --- a/src/quick/items/qquickgridview.cpp +++ b/src/quick/items/qquickgridview.cpp @@ -817,10 +817,9 @@ void QQuickGridViewPrivate::updateFooter() Q_Q(QQuickGridView); bool created = false; if (!footer) { - QQuickItem *item = createComponentItem(footerComponent); + QQuickItem *item = createComponentItem(footerComponent, 1.0); if (!item) return; - item->setZ(1); footer = new FxGridItemSG(item, q, true, true); created = true; } @@ -862,10 +861,9 @@ void QQuickGridViewPrivate::updateHeader() Q_Q(QQuickGridView); bool created = false; if (!header) { - QQuickItem *item = createComponentItem(headerComponent); + QQuickItem *item = createComponentItem(headerComponent, 1.0); if (!item) return; - item->setZ(1); header = new FxGridItemSG(item, q, true, true); created = true; } diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index bab505e790..88a8a30b0c 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -2260,10 +2260,10 @@ bool QQuickItemViewPrivate::releaseItem(FxViewItem *item) QQuickItem *QQuickItemViewPrivate::createHighlightItem() { - return createComponentItem(highlightComponent, true); + return createComponentItem(highlightComponent, 0.0, true); } -QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, bool createDefault) +QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, qreal zValue, bool createDefault) { Q_Q(QQuickItemView); @@ -2272,7 +2272,7 @@ QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, QQmlContext *creationContext = component->creationContext(); QQmlContext *context = new QQmlContext( creationContext ? creationContext : qmlContext(q)); - QObject *nobj = component->create(context); + QObject *nobj = component->beginCreate(context); if (nobj) { QQml_setParent_noEvent(context, nobj); item = qobject_cast(nobj); @@ -2285,9 +2285,12 @@ QQuickItem *QQuickItemViewPrivate::createComponentItem(QQmlComponent *component, item = new QQuickItem; } if (item) { + item->setZ(zValue); QQml_setParent_noEvent(item, q->contentItem()); item->setParentItem(q->contentItem()); } + if (component) + component->completeCreate(); return item; } diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h index 5f28ac7e3a..c235945cbf 100644 --- a/src/quick/items/qquickitemview_p_p.h +++ b/src/quick/items/qquickitemview_p_p.h @@ -196,7 +196,7 @@ public: virtual bool releaseItem(FxViewItem *item); QQuickItem *createHighlightItem(); - QQuickItem *createComponentItem(QQmlComponent *component, bool createDefault = false); + QQuickItem *createComponentItem(QQmlComponent *component, qreal zValue, bool createDefault = false); void updateCurrent(int modelIndex); void updateTrackedItem(); diff --git a/src/quick/items/qquicklistview.cpp b/src/quick/items/qquicklistview.cpp index 09abd63830..864c639f35 100644 --- a/src/quick/items/qquicklistview.cpp +++ b/src/quick/items/qquicklistview.cpp @@ -1272,10 +1272,9 @@ void QQuickListViewPrivate::updateFooter() Q_Q(QQuickListView); bool created = false; if (!footer) { - QQuickItem *item = createComponentItem(footerComponent); + QQuickItem *item = createComponentItem(footerComponent, 1.0); if (!item) return; - item->setZ(1); footer = new FxListItemSG(item, q, true, true); created = true; } @@ -1303,10 +1302,9 @@ void QQuickListViewPrivate::updateHeader() Q_Q(QQuickListView); bool created = false; if (!header) { - QQuickItem *item = createComponentItem(headerComponent); + QQuickItem *item = createComponentItem(headerComponent, 1.0); if (!item) return; - item->setZ(1); header = new FxListItemSG(item, q, true, true); created = true; } -- cgit v1.2.3