summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2010-09-28 03:55:04 (GMT)
committerJason McDonald <jason.mcdonald@nokia.com>2010-10-01 04:47:24 (GMT)
commitbb0d20406d5d1b473b9f8d9c1284d310405fcd47 (patch)
treeb16c6141da44f122a389022a2ae27088b1cddbaf
parent5efa6ff7ca33d2dca14418ac8ffb49b69e2e2452 (diff)
downloadQt-bb0d20406d5d1b473b9f8d9c1284d310405fcd47.zip
Qt-bb0d20406d5d1b473b9f8d9c1284d310405fcd47.tar.gz
Qt-bb0d20406d5d1b473b9f8d9c1284d310405fcd47.tar.bz2
Fix crash when trying to append a null transform to QDeclarativeItem.
Task-number: QTBUG-13893 (cherry picked from commit 085a121cb1ebba38d62c924500dbc71806b29b3c)
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/data/transformCrash.qml13
-rw-r--r--tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp12
3 files changed, 26 insertions, 1 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index e9da4f7..230169d 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -1705,7 +1705,7 @@ int QDeclarativeItemPrivate::transform_count(QDeclarativeListProperty<QGraphicsT
void QDeclarativeItemPrivate::transform_append(QDeclarativeListProperty<QGraphicsTransform> *list, QGraphicsTransform *item)
{
QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) // QGraphicsItem applies the list in the wrong order, so we prepend.
+ if (object && item) // QGraphicsItem applies the list in the wrong order, so we prepend.
QGraphicsItemPrivate::get(object)->prependGraphicsTransform(item);
}
diff --git a/tests/auto/declarative/qdeclarativeitem/data/transformCrash.qml b/tests/auto/declarative/qdeclarativeitem/data/transformCrash.qml
new file mode 100644
index 0000000..ab7fa84
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeitem/data/transformCrash.qml
@@ -0,0 +1,13 @@
+import Qt 4.7
+
+Item {
+ id: wrapper
+ width: 200
+ height: 200
+
+ QtObject {
+ id: object
+ }
+
+ Component.onCompleted: wrapper.transform = object
+}
diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
index 25ca157..6b28c53 100644
--- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
+++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
@@ -81,6 +81,8 @@ private slots:
void resourcesProperty();
void mouseFocus();
+ void transformCrash();
+
private:
template<typename T>
T *findItem(QGraphicsObject *parent, const QString &objectName);
@@ -792,6 +794,16 @@ void tst_QDeclarativeItem::childrenRectBug3()
delete canvas;
}
+// QTBUG-13893
+void tst_QDeclarativeItem::transformCrash()
+{
+ QDeclarativeView *canvas = new QDeclarativeView(0);
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/transformCrash.qml"));
+ canvas->show();
+
+ delete canvas;
+}
+
template<typename T>
T *tst_QDeclarativeItem::findItem(QGraphicsObject *parent, const QString &objectName)
{