┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kitemviews/kitemlistcontainer.cpp10
-rw-r--r--src/kitemviews/kitemlistview.cpp6
-rw-r--r--src/kitemviews/kitemlistview.h5
-rw-r--r--src/kitemviews/kstandarditemlistview.cpp13
-rw-r--r--src/kitemviews/kstandarditemlistview.h1
5 files changed, 26 insertions, 9 deletions
diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp
index 128140e2e..3ec56e5f1 100644
--- a/src/kitemviews/kitemlistcontainer.cpp
+++ b/src/kitemviews/kitemlistcontainer.cpp
@@ -286,7 +286,6 @@ void KItemListContainer::updateScrollOffsetScrollBar()
KItemListSmoothScroller *smoothScroller = nullptr;
QScrollBar *scrollOffsetScrollBar = nullptr;
- int singleStep = 0;
int pageStep = 0;
int maximum = 0;
if (view->scrollOrientation() == Qt::Vertical) {
@@ -296,13 +295,6 @@ void KItemListContainer::updateScrollOffsetScrollBar()
}
scrollOffsetScrollBar = verticalScrollBar();
- // Don't scroll super fast when using a wheel mouse:
- // We want to consider one "line" to be the text label which has a
- // roughly fixed height rather than using the height of the icon which
- // may be very tall
- const QFontMetrics metrics(font());
- singleStep = metrics.height() * QApplication::wheelScrollLines();
-
// 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();
@@ -318,11 +310,11 @@ void KItemListContainer::updateScrollOffsetScrollBar()
return;
}
scrollOffsetScrollBar = horizontalScrollBar();
- singleStep = view->itemSize().width();
pageStep = view->size().width();
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().width()));
}
+ const int singleStep = view->scrollSingleStep();
const int value = view->scrollOffset();
if (smoothScroller->requestScrollBarUpdate(maximum)) {
const bool updatePolicy = (scrollOffsetScrollBar->maximum() > 0 && maximum == 0) || horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOn;
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index c56785c36..265e41e6c 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -398,6 +398,12 @@ void KItemListView::setGeometry(const QRectF &rect)
doLayout(NoAnimation);
}
+qreal KItemListView::scrollSingleStep() const
+{
+ const QFontMetrics metrics(font());
+ return metrics.height();
+}
+
qreal KItemListView::verticalPageStep() const
{
qreal headerHeight = 0;
diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h
index 7fb3344b4..1a4ff0df1 100644
--- a/src/kitemviews/kitemlistview.h
+++ b/src/kitemviews/kitemlistview.h
@@ -176,6 +176,11 @@ public:
qreal verticalPageStep() const;
/**
+ * @return The line step which should be used for the scroll by mouse wheel.
+ */
+ virtual qreal scrollSingleStep() const;
+
+ /**
* @return Index of the item that is below the point \a pos.
* The position is relative to the upper right of
* the visible area. Only (at least partly) visible
diff --git a/src/kitemviews/kstandarditemlistview.cpp b/src/kitemviews/kstandarditemlistview.cpp
index a4e7c3edd..0d57388f3 100644
--- a/src/kitemviews/kstandarditemlistview.cpp
+++ b/src/kitemviews/kstandarditemlistview.cpp
@@ -4,6 +4,8 @@
* SPDX-License-Identifier: GPL-2.0-or-later
*/
+#include <QApplication>
+
#include "kstandarditemlistview.h"
#include "kstandarditemlistwidget.h"
@@ -110,6 +112,17 @@ bool KStandardItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) c
return layout == DetailsLayout;
}
+qreal KStandardItemListView::scrollSingleStep() const
+{
+ if (itemLayout() == DetailsLayout) {
+ // We want each scroll in details view mode to move by some number of complete rows.
+ const int rowsPerFullScroll = qCeil((KItemListView::scrollSingleStep() * QApplication::wheelScrollLines()) / itemSize().height());
+ return (rowsPerFullScroll * itemSize().height()) / QApplication::wheelScrollLines();
+ }
+
+ return KItemListView::scrollSingleStep();
+}
+
void KStandardItemListView::onItemLayoutChanged(ItemLayout current, ItemLayout previous)
{
Q_UNUSED(current)
diff --git a/src/kitemviews/kstandarditemlistview.h b/src/kitemviews/kstandarditemlistview.h
index 396383718..eb2f01d19 100644
--- a/src/kitemviews/kstandarditemlistview.h
+++ b/src/kitemviews/kstandarditemlistview.h
@@ -48,6 +48,7 @@ protected:
/** To be overriden by sub-classes to specify when full row highlighting should be enabled. */
virtual bool itemLayoutHighlightEntireRow(ItemLayout layout) const;
virtual void onItemLayoutChanged(ItemLayout current, ItemLayout previous);
+ virtual qreal scrollSingleStep() const override;
void onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) override;
void onSupportsItemExpandingChanged(bool supportsExpanding) override;
void polishEvent() override;