diff options
| -rw-r--r-- | src/kitemviews/kitemlistcontainer.cpp | 10 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 6 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.h | 5 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistview.cpp | 13 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistview.h | 1 |
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; |
