┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistview.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2011-08-14 17:20:33 +0200
committerFrank Reininghaus <[email protected]>2011-08-14 17:21:18 +0200
commit2476f632de00829425f458462c3b16ea661dfe2f (patch)
tree216926d10f61207e7a263635183ffb05340b6c65 /src/kitemviews/kitemlistview.cpp
parenta7060e6fec46c859000fe963ddf1f8381246741d (diff)
Keep the current item visible in the view
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
-rw-r--r--src/kitemviews/kitemlistview.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 3c3439552..81b46b1d2 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -611,6 +611,32 @@ void KItemListView::slotCurrentChanged(int current, int previous)
Q_ASSERT(!currentWidget->isCurrent());
currentWidget->setCurrent(true);
}
+
+ const QRectF viewGeometry = geometry();
+ const QRectF currentBoundingRect = itemBoundingRect(current);
+
+ if (!viewGeometry.contains(currentBoundingRect)) {
+ // Make sure that the new current item is fully visible in the view.
+ qreal newOffset = offset();
+ if (currentBoundingRect.top() < viewGeometry.top()) {
+ Q_ASSERT(scrollOrientation() == Qt::Vertical);
+ newOffset += currentBoundingRect.top() - viewGeometry.top();
+ }
+ else if ((currentBoundingRect.bottom() > viewGeometry.bottom())) {
+ Q_ASSERT(scrollOrientation() == Qt::Vertical);
+ newOffset += currentBoundingRect.bottom() - viewGeometry.bottom();
+ }
+ else if (currentBoundingRect.left() < viewGeometry.left()) {
+ Q_ASSERT(scrollOrientation() == Qt::Horizontal);
+ newOffset += currentBoundingRect.left() - viewGeometry.left();
+ }
+ else if ((currentBoundingRect.right() > viewGeometry.right())) {
+ Q_ASSERT(scrollOrientation() == Qt::Horizontal);
+ newOffset += currentBoundingRect.right() - viewGeometry.right();
+ }
+
+ emit scrollTo(newOffset);
+ }
}
void KItemListView::slotSelectionChanged(const QSet<int>& current, const QSet<int>& previous)