From e016960338e1bfaed42626f66a3ae99803328b8f Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Mon, 7 Aug 2023 21:26:06 +0300 Subject: [PATCH] QMdiArea: port Q_FOREACH to ranged-for, d->pendingRearrangements Take a copy of the member container as the loop may modify the container (either by moving/reordering the Rearranger elements or by appending). Task-number: QTBUG-115803 Change-Id: Iaf891b29e9c7cdfdb3dc82e03ed94defb8d0cf4c Reviewed-by: Richard Moe Gustavsen Reviewed-by: Ivan Solovev (cherry picked from commit cfec14e1ff94b05bdfe15294199964247dbac518) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/widgets/qmdiarea.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index bed4f450d0f..fdb3e6a1074 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -2327,7 +2327,9 @@ void QMdiArea::showEvent(QShowEvent *showEvent) Q_D(QMdiArea); if (!d->pendingRearrangements.isEmpty()) { bool skipPlacement = false; - foreach (Rearranger *rearranger, d->pendingRearrangements) { + // Take a copy because d->rearrange() may modify d->pendingRearrangements + const auto pendingRearrange = d->pendingRearrangements; + for (Rearranger *rearranger : pendingRearrange) { // If this is the case, we don't have to lay out pending child windows // since the rearranger will find a placement for them. if (rearranger->type() != Rearranger::IconTiler && !skipPlacement)