From fe6ab64089d7ba5dfda1fd9de8ad460c69b91db9 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Tue, 13 Aug 2019 14:59:51 +0200 Subject: [PATCH] make sure all space is assigned when screen res changes it was possible to meake applets overlap after a screen resolution change --- .../containmentlayoutmanager/gridlayoutmanager.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/components/containmentlayoutmanager/gridlayoutmanager.cpp b/components/containmentlayoutmanager/gridlayoutmanager.cpp index fb8a126bc..b95eff63f 100644 --- a/components/containmentlayoutmanager/gridlayoutmanager.cpp +++ b/components/containmentlayoutmanager/gridlayoutmanager.cpp @@ -76,7 +76,7 @@ bool GridLayoutManager::itemIsManaged(ItemContainer *item) return m_pointsForItem.contains(item); } -inline void maintainItemEdgeAlignment(QQuickItem *item, const QRectF &newRect, const QRectF &oldRect) +inline void maintainItemEdgeAlignment(ItemContainer *item, const QRectF &newRect, const QRectF &oldRect) { const qreal leftDist = item->x() - oldRect.x(); const qreal hCenterDist = item->x() + item->width()/2 - oldRect.center().x(); @@ -112,7 +112,13 @@ void GridLayoutManager::layoutGeometryChanged(const QRectF &newGeometry, const Q // Stash the old config //m_parsedConfig[item->key()] = {item->x(), item->y(), item->width(), item->height(), item->rotation()}; // Move the item to maintain the distance with the anchors point - maintainItemEdgeAlignment(item, newGeometry, oldGeometry); + auto *itemCont = qobject_cast(item); + if (itemCont && itemCont != layout()->placeHolder()) { + maintainItemEdgeAlignment(itemCont, newGeometry, oldGeometry); + // NOTE: do not use positionItemAndAssign here, because we do not want to emit layoutNeedsSaving, to not save after resize + positionItem(itemCont); + assignSpaceImpl(itemCont); + } } }