QQuickLoader: fix the recursion guard for size updates

Task-number: QTBUG-30183
Change-Id: Ic8720e1e35bf2f349d74d2021dd202849da67852
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Reviewed-by: Caroline Chao <caroline.chao@digia.com>
Reviewed-by: Jens Bache-Wiig <jens.bache-wiig@digia.com>
This commit is contained in:
J-P Nurmi 2013-03-13 18:31:57 +01:00 committed by The Qt Project
parent d0af156930
commit b7032bed67
3 changed files with 35 additions and 3 deletions

View File

@ -887,16 +887,19 @@ void QQuickLoader::setAsynchronous(bool a)
void QQuickLoaderPrivate::_q_updateSize(bool loaderGeometryChanged)
{
Q_Q(QQuickLoader);
if (!item || updatingSize)
if (!item)
return;
updatingSize = true;
if (loaderGeometryChanged && q->widthValid())
item->setWidth(q->width());
if (loaderGeometryChanged && q->heightValid())
item->setHeight(q->height());
if (updatingSize)
return;
updatingSize = true;
q->setImplicitSize(getImplicitWidth(), getImplicitHeight());
updatingSize = false;

View File

@ -0,0 +1,12 @@
import QtQuick 2.0
Loader {
width: implicitWidth
height: implicitHeight
sourceComponent: Rectangle {
color: "green"
implicitWidth: 240
implicitHeight: 120
}
}

View File

@ -126,6 +126,7 @@ private slots:
void parented();
void sizeBound();
void QTBUG_30183();
private:
QQmlEngine engine;
@ -1126,6 +1127,22 @@ void tst_QQuickLoader::sizeBound()
delete root;
}
void tst_QQuickLoader::QTBUG_30183()
{
QQmlComponent component(&engine, testFileUrl("/QTBUG_30183.qml"));
QQuickLoader *loader = qobject_cast<QQuickLoader*>(component.create());
QVERIFY(loader != 0);
QCOMPARE(loader->width(), 240.0);
QCOMPARE(loader->height(), 120.0);
// the loaded item must follow the size
QQuickItem *rect = qobject_cast<QQuickItem*>(loader->item());
QVERIFY(rect);
QCOMPARE(rect->width(), 240.0);
QCOMPARE(rect->height(), 120.0);
delete loader;
}
QTEST_MAIN(tst_QQuickLoader)