aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGlenn Watson <glenn.watson@nokia.com>2011-11-22 08:02:17 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-22 03:31:14 +0100
commitd2c1adc6f9afc4dd1bab3c487bbde70f3b8f2e81 (patch)
tree633ef62d68173c588de1ff81e6e6ee25117f0b7f /tests
parent0bf08af2b945f10f44561ffa0abd6f89b093b376 (diff)
Emit destruction signal before child contexts are destroyed.
Verbatim comment from bug report: When using a QtObject inside an item, and then we call a function in the Component.onDestruction handler of that item, we get a crash. This happens because the QDeclarativeContextData engine has been invalidated before reaching QDeclarativeExpressionPrivate::evalFunction. Change code to emit the onDestruction signal before the child contexts are invalidated. Task-number: QTBUG-22535 Change-Id: Ic4983ae5fdf104ae977189c21dc202c9b02bc2bc Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml8
-rw-r--r--tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml10
-rw-r--r--tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp13
3 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml b/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml
new file mode 100644
index 0000000000..294c744317
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativecontext/data/Object_22535.qml
@@ -0,0 +1,8 @@
+import QtQuick 2.0
+
+QtObject {
+
+ function goodBye()
+ {
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml b/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml
new file mode 100644
index 0000000000..3553f6c03b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativecontext/data/qtbug_22535.qml
@@ -0,0 +1,10 @@
+import QtQuick 2.0
+
+Rectangle {
+ width: 64
+ height: 64
+
+ Object_22535 { id:o }
+
+ Component.onDestruction: o.goodBye()
+}
diff --git a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
index 68599a2e83..ba9db4f875 100644
--- a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
+++ b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
@@ -80,6 +80,7 @@ private slots:
void refreshExpressionsCrash();
void refreshExpressionsRootContext();
+ void qtbug_22535();
private:
QDeclarativeEngine engine;
};
@@ -644,6 +645,18 @@ void tst_qdeclarativecontext::refreshExpressionsRootContext()
delete o1;
}
+void tst_qdeclarativecontext::qtbug_22535()
+{
+ QDeclarativeEngine engine;
+ QDeclarativeComponent component(&engine, TEST_FILE("qtbug_22535.qml"));
+ QDeclarativeContext context(engine.rootContext());
+
+ QObject *o = component.create(&context);
+
+ // Don't crash!
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativecontext)
#include "tst_qdeclarativecontext.moc"