diff options
author | Bea Lam <bea.lam@nokia.com> | 2012-05-25 17:33:02 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-28 02:39:10 +0200 |
commit | 1deba22774e59458dc2e485f1cdf8f5b547d2941 (patch) | |
tree | 93b86efe4bf43cd44e4637c264d62d204d074227 | |
parent | add9da7811aca90febf90555f4c18e5d84ab7eec (diff) |
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 <martin.jones@nokia.com>
-rw-r--r-- | src/quick/items/qquickgridview.cpp | 6 | ||||
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 9 | ||||
-rw-r--r-- | src/quick/items/qquickitemview_p_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquicklistview.cpp | 6 | ||||
-rw-r--r-- | tests/auto/quick/qquickgridview/data/initialZValues.qml | 35 | ||||
-rw-r--r-- | tests/auto/quick/qquickgridview/tst_qquickgridview.cpp | 21 | ||||
-rw-r--r-- | tests/auto/quick/qquicklistview/data/initialZValues.qml | 35 | ||||
-rw-r--r-- | tests/auto/quick/qquicklistview/tst_qquicklistview.cpp | 21 |
8 files changed, 123 insertions, 12 deletions
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<QQuickItem *>(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; } diff --git a/tests/auto/quick/qquickgridview/data/initialZValues.qml b/tests/auto/quick/qquickgridview/data/initialZValues.qml new file mode 100644 index 0000000000..9768b2c695 --- /dev/null +++ b/tests/auto/quick/qquickgridview/data/initialZValues.qml @@ -0,0 +1,35 @@ +import QtQuick 2.0 + +Rectangle { + width: 240 + height: 320 + + GridView { + id: grid + + property real initialZ: 342 + + anchors.fill: parent + objectName: "grid" + model: ListModel {} + + delegate: Text { + objectName: "wrapper" + font.pointSize: 20 + text: index + } + + header: Rectangle { + width: 240 + height: 30 + z: grid.initialZ + } + + footer: Rectangle { + width: 240 + height: 30 + z: grid.initialZ + } + } +} + diff --git a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp index 8dc7fda49a..828a10242b 100644 --- a/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp +++ b/tests/auto/quick/qquickgridview/tst_qquickgridview.cpp @@ -118,6 +118,7 @@ private slots: void manualHighlight(); void footer(); void footer_data(); + void initialZValues(); void header(); void header_data(); void extents(); @@ -3265,6 +3266,26 @@ void tst_QQuickGridView::footer_data() << QPointF(-(6 * 80) - 40, -320); } +void tst_QQuickGridView::initialZValues() +{ + QQuickView *canvas = createView(); + canvas->setSource(testFileUrl("initialZValues.qml")); + qApp->processEvents(); + + QQuickGridView *gridview = findItem<QQuickGridView>(canvas->rootObject(), "grid"); + QTRY_VERIFY(gridview != 0); + QQuickItem *contentItem = gridview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QVERIFY(gridview->headerItem()); + QTRY_COMPARE(gridview->headerItem()->z(), gridview->property("initialZ").toReal()); + + QVERIFY(gridview->footerItem()); + QTRY_COMPARE(gridview->footerItem()->z(), gridview->property("initialZ").toReal()); + + delete canvas; +} + void tst_QQuickGridView::header() { QFETCH(QQuickGridView::Flow, flow); diff --git a/tests/auto/quick/qquicklistview/data/initialZValues.qml b/tests/auto/quick/qquicklistview/data/initialZValues.qml new file mode 100644 index 0000000000..3a8e78debb --- /dev/null +++ b/tests/auto/quick/qquicklistview/data/initialZValues.qml @@ -0,0 +1,35 @@ +import QtQuick 2.0 + +Rectangle { + width: 240 + height: 320 + + ListView { + id: list + + property real initialZ: 342 + + anchors.fill: parent + objectName: "list" + model: ListModel {} + + delegate: Text { + objectName: "wrapper" + font.pointSize: 20 + text: index + } + + header: Rectangle { + width: 240 + height: 30 + z: list.initialZ + } + + footer: Rectangle { + width: 240 + height: 30 + z: list.initialZ + } + } +} + diff --git a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp index 46520519fe..f24f91ccf6 100644 --- a/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp +++ b/tests/auto/quick/qquicklistview/tst_qquicklistview.cpp @@ -149,6 +149,7 @@ private slots: void componentChanges(); void modelChanges(); void manualHighlight(); + void initialZValues(); void header(); void header_data(); void header_delayItemCreation(); @@ -3218,6 +3219,26 @@ void tst_QQuickListView::QTBUG_11105() delete testObject; } +void tst_QQuickListView::initialZValues() +{ + QQuickView *canvas = createView(); + canvas->setSource(testFileUrl("initialZValues.qml")); + qApp->processEvents(); + + QQuickListView *listview = findItem<QQuickListView>(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + QQuickItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QVERIFY(listview->headerItem()); + QTRY_COMPARE(listview->headerItem()->z(), listview->property("initialZ").toReal()); + + QVERIFY(listview->footerItem()); + QTRY_COMPARE(listview->footerItem()->z(), listview->property("initialZ").toReal()); + + delete canvas; +} + void tst_QQuickListView::header() { QFETCH(QQuickListView::Orientation, orientation); |