┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorYichao Yu <[email protected]>2013-11-21 00:47:23 +0100
committerFrank Reininghaus <[email protected]>2013-11-21 00:47:40 +0100
commitc3ad6c74064c842c2514a3a9bbc5574e631fd6dc (patch)
treeb0e62e47512144d055b2b2f783f9b1ebb8a15402 /src/kitemviews
parentc89cd8e789743fbf437ea1971067511c6c57756d (diff)
Fix incorrect geometry updates in KItemListContainer
When resizing the window and when KItemListContainer::updateGeometries is called before the scrollbar visibility is updated, a relayout is triggered in `m_controller->view()->setGeometry` which updates the scrollbar visibility and calls back to `KItemListContainer::updateGeometries` again. Since the first call, which has the wrong geometry (due to the incorrect scrollbar states), updates the geometries of the scene and viewport after the second call (which has the right geometry!!) returns, the final result is a size that corresponded to the old scrollbar state before this commit. This patch uses the new geometry of the view after updating it (since it might not be the size we put in) and therefore makes the sizes consistent. BUG: 327709 FIXED-IN: 4.11.4 REVIEW: 113939
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kitemlistcontainer.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp
index cd2fca1e1..8498286c9 100644
--- a/src/kitemviews/kitemlistcontainer.cpp
+++ b/src/kitemviews/kitemlistcontainer.cpp
@@ -351,14 +351,15 @@ void KItemListContainer::updateGeometries()
? extra + scrollbarSpacing + style()->pixelMetric(QStyle::PM_ScrollBarExtent, &option, this)
: extra;
- rect.adjust(0, 0, -widthDec, -heightDec);
-
- const QRectF newGeometry(0, 0, rect.width(), rect.height());
+ const QRectF newGeometry(0, 0, rect.width() - widthDec,
+ rect.height() - heightDec);
if (m_controller->view()->geometry() != newGeometry) {
m_controller->view()->setGeometry(newGeometry);
- static_cast<KItemListContainerViewport*>(viewport())->scene()->setSceneRect(0, 0, rect.width(), rect.height());
- static_cast<KItemListContainerViewport*>(viewport())->viewport()->setGeometry(QRect(0, 0, rect.width(), rect.height()));
+ // Get the real geometry of the view again since the scrollbars
+ // visibilities and the view geometry may have changed in re-layout.
+ static_cast<KItemListContainerViewport*>(viewport())->scene()->setSceneRect(m_controller->view()->geometry());
+ static_cast<KItemListContainerViewport*>(viewport())->viewport()->setGeometry(m_controller->view()->geometry().toRect());
updateScrollOffsetScrollBar();
updateItemOffsetScrollBar();