diff options
| author | Peter Penz <[email protected]> | 2012-02-05 19:14:17 +0100 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-02-05 19:22:34 +0100 |
| commit | 7af39fb960352e0504153c627db0615d80758ebe (patch) | |
| tree | 93427542fb54d7ea854d82d09b72a3ddc7b5b8bb /src/kitemviews/kitemlistview.cpp | |
| parent | d0933155e2dc179cde49b4306ff7feee9ca47697 (diff) | |
Fix potential endless loop in layout
Usecase:
- No scrollbar is shown
- Window size will be decreased so that a scrollbar gets necessary
The decreased window size minus the space required for the scrollbar
results in a relayout of the items. In 99 % of all
cases a decreased window size won't result in showing more items in parallel in
comparison to a larger window size. However in the remaining 1 % this can
happen (e.g. see bug 293318 for a sample). This results in an endless loop as
now no scrollbar is required anymore, the layout changes again, the scrollbar
is required again, ...
BUG: 293318
FIXED-IN: 4.8.1
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index c671a2e6e..52d857705 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -1880,6 +1880,19 @@ bool KItemListView::animateChangedItemCount(int changedItemCount) const return changedItemCount <= maximum * 2 / 3; } + +bool KItemListView::scrollBarRequired(const QSizeF& size) const +{ + const QSizeF oldSize = m_layouter->size(); + + m_layouter->setSize(size); + const qreal maxOffset = m_layouter->maximumScrollOffset(); + m_layouter->setSize(oldSize); + + return m_layouter->scrollOrientation() == Qt::Vertical ? maxOffset > size.height() + : maxOffset > size.width(); +} + int KItemListView::calculateAutoScrollingIncrement(int pos, int range, int oldInc) { int inc = 0; |
