summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Martin <[email protected]>2018-01-29 11:52:23 +0100
committerMarco Martin <[email protected]>2018-01-29 11:54:12 +0100
commit0b130dd57e594d7433141483aa162e4414a9d07b (patch)
tree0db82dc34e688b542703f4ebdd141abffed0d7c9
parent7caef6d251a1611842f73a9942f1bfc1dd2ec13b (diff)
base scrolling on the smallest item
Summary: CCBUG: 386379 after recent highdpi patches on scrolling that delegated it completely to the scrollbar, based upon the scrollbar singleStep setted to the tallest of the items in the view. tough this makes scrolling way too fast, and on folders where just few filenames are longer than most we can get a single scrolling step almost double the number of lines configured in the mouse kcm. Using the shortest item instead of the tallest mitigates this problem making it a bit more usable Test Plan: tested on different folders in different view modes both with mouse and touchpad Reviewers: #dolphin, broulik, ngraham Reviewed By: #dolphin, ngraham Subscribers: ngraham, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D10102
-rw-r--r--src/kitemviews/kitemlistcontainer.cpp1
-rw-r--r--src/kitemviews/kitemlistview.cpp2
-rw-r--r--src/kitemviews/private/kitemlistsizehintresolver.cpp8
-rw-r--r--src/kitemviews/private/kitemlistsizehintresolver.h2
4 files changed, 11 insertions, 2 deletions
diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp
index 8e64ee4..c1eae53 100644
--- a/src/kitemviews/kitemlistcontainer.cpp
+++ b/src/kitemviews/kitemlistcontainer.cpp
@@ -35,7 +35,6 @@
#include <QStyle>
#include <QStyleOption>
-
/**
* Replaces the default viewport of KItemListContainer by a
* non-scrollable viewport. The scrolling is done in an optimized
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 7109103..dbeb571 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -342,7 +342,7 @@ QSizeF KItemListView::itemSize() const
QSizeF KItemListView::itemSizeHint() const
{
- return m_sizeHintResolver->maxSizeHint();
+ return m_sizeHintResolver->minSizeHint();
}
const KItemListStyleOption& KItemListView::styleOption() const
diff --git a/src/kitemviews/private/kitemlistsizehintresolver.cpp b/src/kitemviews/private/kitemlistsizehintresolver.cpp
index 02f1865..5c121c6 100644
--- a/src/kitemviews/private/kitemlistsizehintresolver.cpp
+++ b/src/kitemviews/private/kitemlistsizehintresolver.cpp
@@ -26,6 +26,7 @@ KItemListSizeHintResolver::KItemListSizeHintResolver(const KItemListView* itemLi
m_logicalHeightHintCache(),
m_logicalWidthHint(0.0),
m_logicalHeightHint(0.0),
+ m_minHeightHint(0.0),
m_needsResolving(false)
{
}
@@ -40,6 +41,12 @@ QSizeF KItemListSizeHintResolver::maxSizeHint()
return QSizeF(m_logicalWidthHint, m_logicalHeightHint);
}
+QSizeF KItemListSizeHintResolver::minSizeHint()
+{
+ updateCache();
+ return QSizeF(m_logicalWidthHint, m_minHeightHint);
+}
+
QSizeF KItemListSizeHintResolver::sizeHint(int index)
{
updateCache();
@@ -161,6 +168,7 @@ void KItemListSizeHintResolver::updateCache()
m_logicalHeightHint = 0.0;
} else {
m_logicalHeightHint = *std::max_element(m_logicalHeightHintCache.begin(), m_logicalHeightHintCache.end());
+ m_minHeightHint = *std::min_element(m_logicalHeightHintCache.begin(), m_logicalHeightHintCache.end());
}
m_needsResolving = false;
}
diff --git a/src/kitemviews/private/kitemlistsizehintresolver.h b/src/kitemviews/private/kitemlistsizehintresolver.h
index 841e9ca..fa92b86 100644
--- a/src/kitemviews/private/kitemlistsizehintresolver.h
+++ b/src/kitemviews/private/kitemlistsizehintresolver.h
@@ -37,6 +37,7 @@ public:
KItemListSizeHintResolver(const KItemListView* itemListView);
virtual ~KItemListSizeHintResolver();
QSizeF maxSizeHint();
+ QSizeF minSizeHint();
QSizeF sizeHint(int index);
void itemsInserted(const KItemRangeList& itemRanges);
@@ -52,6 +53,7 @@ private:
mutable QVector<qreal> m_logicalHeightHintCache;
mutable qreal m_logicalWidthHint;
mutable qreal m_logicalHeightHint;
+ mutable qreal m_minHeightHint;
bool m_needsResolving;
};