diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2019-10-23 10:25:23 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2019-10-24 13:24:55 +0200 |
commit | b6d88c73c4affec93655f97588abc7ae1d53cea0 (patch) | |
tree | fe297621847a922336ec4019fb6d87ec406e4395 | |
parent | 8bc05e07c8bafb8d9eb64839234305fc7fffdd69 (diff) |
Loader: Actually clear initial properties when changing source
Fixes: QTBUG-79435
Change-Id: Ic99a3b1a9d64426a64117b90a3e11fe99af0d260
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
4 files changed, 31 insertions, 1 deletions
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index d0e29c204e..b389e7a11b 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -590,8 +590,8 @@ void QQuickLoader::setSource(QQmlV4Function *args) d->clear(); QUrl sourceUrl = d->resolveSourceUrl(args); + d->disposeInitialPropertyValues(); if (!ipv->isUndefined()) { - d->disposeInitialPropertyValues(); d->initialPropertyValues.set(args->v4engine(), ipv); } d->qmlCallingContext.set(scope.engine, scope.engine->qmlContext()); @@ -601,6 +601,7 @@ void QQuickLoader::setSource(QQmlV4Function *args) void QQuickLoaderPrivate::disposeInitialPropertyValues() { + initialPropertyValues.clear(); } void QQuickLoaderPrivate::load() diff --git a/tests/auto/quick/qquickloader/data/CacheClearTest.qml b/tests/auto/quick/qquickloader/data/CacheClearTest.qml new file mode 100644 index 0000000000..acab79f96e --- /dev/null +++ b/tests/auto/quick/qquickloader/data/CacheClearTest.qml @@ -0,0 +1,4 @@ +import QtQml 2.12 +QtObject { + property int i: 42 +} diff --git a/tests/auto/quick/qquickloader/data/initialPropertyValues.11.qml b/tests/auto/quick/qquickloader/data/initialPropertyValues.11.qml new file mode 100644 index 0000000000..ddc874d14c --- /dev/null +++ b/tests/auto/quick/qquickloader/data/initialPropertyValues.11.qml @@ -0,0 +1,20 @@ +import QtQuick 2.0 + +Item { + id: root + property int oldi: 0 + property int i: 0 + + Loader { + id: loader + objectName: "loader" + active: true + } + + Component.onCompleted: { + loader.setSource("CacheClearTest.qml", {i: 12}) + root.oldi = loader.item.i + loader.setSource("CacheClearTest.qml") + root.i = loader.item.i // should be 42 + } +} diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp index fbdd87905b..d0a1a8a45b 100644 --- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp +++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp @@ -681,6 +681,11 @@ void tst_QQuickLoader::initialPropertyValues_data() << QStringList() << (QStringList() << "initialValue") << (QVariantList() << 6); + + QTest::newRow("source url changed, previously initial properties are discared") << testFileUrl("initialPropertyValues.11.qml") + << QStringList() + << (QStringList() << "oldi" << "i") + << (QVariantList() << 12 << 42); } void tst_QQuickLoader::initialPropertyValues() |