Fix maximum value for scroll bar when deleting items in Details View

The problem was that the view heigt minus the header height was
subtracted from maximumScrollOffset() to determine the maximum value
of the scroll offset of the top of the view.

However, the top of the view is the part that is hiden behind the
header. Therefore, the full view height must be subtracted from
maximumScrollOffset.

The remaining bits of bug 319951 were fixed by other recent commits.

Thanks to Emmanuel Pescosta for helping to track down the problem!

BUG: 319951
FIXED-IN: 4.11.0
REVIEW: 111486
This commit is contained in:
Frank Reininghaus 2013-07-25 22:25:18 +02:00
parent 08c2f7f5fb
commit 55a989626d

View file

@ -257,6 +257,7 @@ void KItemListContainer::updateScrollOffsetScrollBar()
QScrollBar* scrollOffsetScrollBar = 0;
int singleStep = 0;
int pageStep = 0;
int maximum = 0;
if (view->scrollOrientation() == Qt::Vertical) {
smoothScroller = m_verticalSmoothScroller;
scrollOffsetScrollBar = verticalScrollBar();
@ -264,15 +265,21 @@ void KItemListContainer::updateScrollOffsetScrollBar()
// We cannot use view->size().height() because this height might
// include the header widget, which is not part of the scrolled area.
pageStep = view->verticalPageStep();
// However, the total height of the view must be considered for the
// maximum value of the scroll bar. Note that the view's scrollOffset()
// refers to the offset of the top part of the view, which might be
// hidden behind the header.
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().height()));
} else {
smoothScroller = m_horizontalSmoothScroller;
scrollOffsetScrollBar = horizontalScrollBar();
singleStep = view->itemSize().width();
pageStep = view->size().width();
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().width()));
}
const int value = view->scrollOffset();
const int maximum = qMax(0, int(view->maximumScrollOffset() - pageStep));
if (smoothScroller->requestScrollBarUpdate(maximum)) {
const bool updatePolicy = (scrollOffsetScrollBar->maximum() > 0 && maximum == 0)
|| horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOn;