diff options
-rw-r--r-- | src/quick/items/qquickloader.cpp | 4 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquickloader/data/sizebound.qml | 30 | ||||
-rw-r--r-- | tests/auto/qtquick2/qquickloader/tst_qquickloader.cpp | 22 |
3 files changed, 55 insertions, 1 deletions
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index 50347f993b..92724f4095 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -569,12 +569,14 @@ void QQuickLoaderPrivate::incubatorStateChanged(QDeclarativeIncubator::Status st QObject *obj = incubator->object(); item = qobject_cast<QQuickItem*>(obj); if (item) { + emit q->itemChanged(); initResize(); } else { qmlInfo(q) << QQuickLoader::tr("Loader does not support loading non-visual elements."); delete itemContext; itemContext = 0; delete obj; + emit q->itemChanged(); } incubator->clear(); } else if (status == QDeclarativeIncubator::Error) { @@ -584,6 +586,7 @@ void QQuickLoaderPrivate::incubatorStateChanged(QDeclarativeIncubator::Status st itemContext = 0; delete incubator->object(); source = QUrl(); + emit q->itemChanged(); } if (loadingFromSource) emit q->sourceChanged(); @@ -591,7 +594,6 @@ void QQuickLoaderPrivate::incubatorStateChanged(QDeclarativeIncubator::Status st emit q->sourceComponentChanged(); emit q->statusChanged(); emit q->progressChanged(); - emit q->itemChanged(); emit q->loaded(); disposeInitialPropertyValues(); // cleanup } diff --git a/tests/auto/qtquick2/qquickloader/data/sizebound.qml b/tests/auto/qtquick2/qquickloader/data/sizebound.qml new file mode 100644 index 0000000000..09cf32426a --- /dev/null +++ b/tests/auto/qtquick2/qquickloader/data/sizebound.qml @@ -0,0 +1,30 @@ +import QtQuick 2.0 + +Item { + width: 200; height: 200 + + function switchComponent() { + load.sourceComponent = comp2 + } + + Component { + id: comp + Rectangle { + width: 50; height: 60; color: "red" + } + } + + Component { + id: comp2 + Rectangle { + width: 80; height: 90; color: "green" + } + } + + Loader { + id: load + objectName: "loader" + sourceComponent: comp + height: item ? item.height : 0 + } +} diff --git a/tests/auto/qtquick2/qquickloader/tst_qquickloader.cpp b/tests/auto/qtquick2/qquickloader/tst_qquickloader.cpp index 4001f70ed9..33148db7b1 100644 --- a/tests/auto/qtquick2/qquickloader/tst_qquickloader.cpp +++ b/tests/auto/qtquick2/qquickloader/tst_qquickloader.cpp @@ -104,6 +104,7 @@ private slots: void asynchronous_clear(); void parented(); + void sizeBound(); private: QDeclarativeEngine engine; @@ -959,6 +960,27 @@ void tst_QQuickLoader::parented() delete root; } +void tst_QQuickLoader::sizeBound() +{ + QDeclarativeComponent component(&engine, testFileUrl("sizebound.qml")); + QQuickItem *root = qobject_cast<QQuickItem*>(component.create()); + QVERIFY(root); + QQuickLoader *loader = root->findChild<QQuickLoader*>("loader"); + QVERIFY(loader != 0); + + QVERIFY(loader->item()); + + QCOMPARE(loader->width(), 50.0); + QCOMPARE(loader->height(), 60.0); + + QMetaObject::invokeMethod(root, "switchComponent"); + + QCOMPARE(loader->width(), 80.0); + QCOMPARE(loader->height(), 90.0); + + delete root; +} + QTEST_MAIN(tst_QQuickLoader) |