aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/layouts/qquicklinearlayout.cpp4
-rw-r--r--tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml37
2 files changed, 39 insertions, 2 deletions
diff --git a/src/imports/layouts/qquicklinearlayout.cpp b/src/imports/layouts/qquicklinearlayout.cpp
index 7626506c75..760700beaf 100644
--- a/src/imports/layouts/qquicklinearlayout.cpp
+++ b/src/imports/layouts/qquicklinearlayout.cpp
@@ -470,8 +470,6 @@ void QQuickGridLayoutBase::rearrange(const QSizeF &size)
if (!isReady())
return;
- ensureLayoutItemsUpdated();
-
qCDebug(lcQuickLayouts) << "QQuickGridLayoutBase::rearrange" << d->m_recurRearrangeCounter << this;
const auto refCounter = qScopeGuard([&d] {
--(d->m_recurRearrangeCounter);
@@ -483,6 +481,8 @@ void QQuickGridLayoutBase::rearrange(const QSizeF &size)
return;
}
+ ensureLayoutItemsUpdated();
+
d->m_rearranging = true;
qCDebug(lcQuickLayouts) << objectName() << "QQuickGridLayoutBase::rearrange()" << size;
Qt::LayoutDirection visualDir = effectiveLayoutDirection();
diff --git a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
index 85fe54eca6..87e0a01df2 100644
--- a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
+++ b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
@@ -1233,5 +1233,42 @@ Item {
// DO NOT CRASH due to stack overflow (or loop endlessly due to updatePolish()/polish() loop)
}
+
+ Component {
+ id: layout_dependentWidth_QTBUG_87253_Component
+
+ RowLayout {
+ anchors.fill: parent;
+
+ RowLayout {
+ spacing: 10
+
+ Text {
+ id: btnOPE
+ text: qsTr("Ok")
+ Layout.fillWidth: true
+ Layout.preferredWidth: (parent.width - 20) / 2
+ }
+
+ Text {
+ id: btnSeeChanged
+ text: qsTr("Not Ok");
+ Layout.fillWidth: true
+ Layout.preferredWidth: (parent.width - 20) / 2
+ }
+ }
+ }
+ }
+
+ function test_dependentWidth_QTBUG_87253()
+ {
+ var warningMsg = new RegExp("Qt Quick Layouts: Detected recursive rearrange. "
+ + "Aborting after two iterations.")
+ for (var i = 0; i < 10; ++i) {
+ ignoreWarning(warningMsg)
+ }
+ var layout = createTemporaryObject(layout_dependentWidth_QTBUG_87253_Component, container)
+ waitForRendering(layout)
+ }
}
}