aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBea Lam <bea.lam@nokia.com>2012-05-25 17:33:02 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-28 02:39:10 +0200
commit1deba22774e59458dc2e485f1cdf8f5b547d2941 (patch)
tree93b86efe4bf43cd44e4637c264d62d204d074227
parentadd9da7811aca90febf90555f4c18e5d84ab7eec (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.cpp6
-rw-r--r--src/quick/items/qquickitemview.cpp9
-rw-r--r--src/quick/items/qquickitemview_p_p.h2
-rw-r--r--src/quick/items/qquicklistview.cpp6
-rw-r--r--tests/auto/quick/qquickgridview/data/initialZValues.qml35
-rw-r--r--tests/auto/quick/qquickgridview/tst_qquickgridview.cpp21
-rw-r--r--tests/auto/quick/qquicklistview/data/initialZValues.qml35
-rw-r--r--tests/auto/quick/qquicklistview/tst_qquicklistview.cpp21
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);