diff options
-rw-r--r-- | src/imports/layouts/qquicklinearlayout.cpp | 4 | ||||
-rw-r--r-- | tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml | 37 |
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) + } } } |