From b8b900891bd78615a3e9dd467f0ce823fe126c5e Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Tue, 20 Aug 2024 13:32:09 +0200 Subject: [PATCH] scene/workspacescene: don't iterate through all child items twice Instead, use an iterator for the second loop to pick up where the first loop stopped --- src/scene/workspacescene.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/scene/workspacescene.cpp b/src/scene/workspacescene.cpp index ad7742b003..c0006e1364 100644 --- a/src/scene/workspacescene.cpp +++ b/src/scene/workspacescene.cpp @@ -154,7 +154,9 @@ Item *WorkspaceScene::overlayItem() const static bool addCandidates(SurfaceItem *item, QList &candidates, ssize_t maxCount, QRegion &occluded) { const QList children = item->sortedChildItems(); - for (const auto &child : children | std::views::reverse) { + auto it = children.rbegin(); + for (; it != children.rend(); it++) { + Item *const child = *it; if (child->z() < 0) { break; } @@ -169,10 +171,8 @@ static bool addCandidates(SurfaceItem *item, QList &candidates, s } candidates.push_back(item); occluded += item->mapToScene(item->opaque()); - for (const auto &child : children | std::views::reverse) { - if (child->z() >= 0) { - continue; - } + for (; it != children.rend(); it++) { + Item *const child = *it; if (child->isVisible() && !occluded.contains(child->mapToScene(child->boundingRect()).toAlignedRect())) { if (!addCandidates(static_cast(child), candidates, maxCount, occluded)) { return false;