aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/qml/qqmlmetatype.cpp2
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp20
2 files changed, 21 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp
index 1a27a487bd..c5d11ee3c3 100644
--- a/src/qml/qml/qqmlmetatype.cpp
+++ b/src/qml/qml/qqmlmetatype.cpp
@@ -244,7 +244,7 @@ void QQmlType::SingletonInstanceInfo::destroy(QQmlEngine *e)
QObject *o = qobjectApis.take(e);
if (o) {
QQmlData *ddata = QQmlData::get(o, false);
- if (ddata && ddata->indestructible)
+ if (url.isEmpty() && ddata && ddata->indestructible && ddata->explicitIndestructibleSet)
return;
delete o;
}
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 1f299c0dbb..71f206ed8f 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -249,6 +249,8 @@ private slots:
void dataAlignment();
+ void deleteSingletons();
+
private:
QQmlEngine engine;
QStringList defaultImportPathList;
@@ -4089,6 +4091,24 @@ void tst_qqmllanguage::dataAlignment()
QVERIFY(sizeof(QQmlVMEMetaData::MethodData) % sizeof(int) == 0);
}
+void tst_qqmllanguage::deleteSingletons()
+{
+ QPointer<QObject> singleton;
+ {
+ QQmlEngine tmpEngine;
+ QQmlComponent component(&tmpEngine, testFile("singletonTest5.qml"));
+ VERIFY_ERRORS(0);
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+ QObject *s1 = NULL;
+ getSingletonInstance(o, "singletonInstance", &s1);
+ QVERIFY(s1 != 0);
+ singleton = s1;
+ QVERIFY(singleton.data() != 0);
+ }
+ QVERIFY(singleton.data() == 0);
+}
+
QTEST_MAIN(tst_qqmllanguage)
#include "tst_qqmllanguage.moc"