diff options
-rw-r--r-- | src/quick/items/qquickloader.cpp | 9 | ||||
-rw-r--r-- | tests/auto/quick/qquickloader/qquickloader.pro | 1 | ||||
-rw-r--r-- | tests/auto/quick/qquickloader/tst_qquickloader.cpp | 15 |
3 files changed, 19 insertions, 6 deletions
diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index cd356a9eeb..27afe5a5db 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -916,9 +916,14 @@ void QQuickLoaderPrivate::_q_updateSize(bool loaderGeometryChanged) if (!item) return; - if (loaderGeometryChanged && q->widthValid()) + const bool needToUpdateWidth = loaderGeometryChanged && q->widthValid(); + const bool needToUpdateHeight = loaderGeometryChanged && q->heightValid(); + + if (needToUpdateWidth && needToUpdateHeight) + item->setSize(QSizeF(q->width(), q->height())); + else if (needToUpdateWidth) item->setWidth(q->width()); - if (loaderGeometryChanged && q->heightValid()) + else if (needToUpdateHeight) item->setHeight(q->height()); if (updatingSize) diff --git a/tests/auto/quick/qquickloader/qquickloader.pro b/tests/auto/quick/qquickloader/qquickloader.pro index 32350388e8..06fb75793d 100644 --- a/tests/auto/quick/qquickloader/qquickloader.pro +++ b/tests/auto/quick/qquickloader/qquickloader.pro @@ -9,6 +9,7 @@ SOURCES += tst_qquickloader.cpp \ ../../shared/testhttpserver.cpp include (../../shared/util.pri) +include (../shared/util.pri) TESTDATA = data/* diff --git a/tests/auto/quick/qquickloader/tst_qquickloader.cpp b/tests/auto/quick/qquickloader/tst_qquickloader.cpp index 3e7439f3e9..521388c5fa 100644 --- a/tests/auto/quick/qquickloader/tst_qquickloader.cpp +++ b/tests/auto/quick/qquickloader/tst_qquickloader.cpp @@ -35,6 +35,7 @@ #include <private/qquickloader_p.h> #include "testhttpserver.h" #include "../../shared/util.h" +#include "../shared/geometrytestutil.h" class SlowComponent : public QQmlComponent { @@ -403,10 +404,16 @@ void tst_QQuickLoader::sizeItemToLoader() QCOMPARE(rect->height(), 80.0); // Check resize - loader->setWidth(180); - loader->setHeight(30); - QCOMPARE(rect->width(), 180.0); - QCOMPARE(rect->height(), 30.0); + QSizeChangeListener sizeListener(rect); + const QSizeF size(180, 30); + loader->setSize(size); + QVERIFY2(!sizeListener.isEmpty(), "There should be at least one signal about the size changed"); + for (const QSizeF sizeOnGeometryChanged : sizeListener) { + // Check that we have the correct size on all signals + QCOMPARE(sizeOnGeometryChanged, size); + } + QCOMPARE(rect->width(), size.width()); + QCOMPARE(rect->height(), size.height()); // Switch mode loader->resetWidth(); // reset explicit size |