From b94b172f5163fe5daab50dc197171d3662ee7c0d Mon Sep 17 00:00:00 2001 From: Nathan Misner Date: Fri, 5 Jul 2024 15:49:47 +0000 Subject: Add support for Plasma's global smooth scrolling setting KItemListSmoothScroller now checks whether smooth scrolling is enabled globally and listens for any changes to the setting via DBus. --- src/kitemviews/private/kitemlistsmoothscroller.cpp | 30 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'src/kitemviews/private/kitemlistsmoothscroller.cpp') diff --git a/src/kitemviews/private/kitemlistsmoothscroller.cpp b/src/kitemviews/private/kitemlistsmoothscroller.cpp index 3e325b934..1fc452542 100644 --- a/src/kitemviews/private/kitemlistsmoothscroller.cpp +++ b/src/kitemviews/private/kitemlistsmoothscroller.cpp @@ -6,7 +6,11 @@ #include "kitemlistsmoothscroller.h" +#include +#include + #include +#include #include #include #include @@ -20,9 +24,17 @@ KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar *scrollBar, QObject , m_animation(nullptr) { m_animation = new QPropertyAnimation(this); - const int animationDuration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, m_scrollBar); - const bool animationEnabled = (animationDuration > 0); - m_animation->setDuration(animationEnabled ? animationDuration : 1); + + KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig(QStringLiteral("kdeglobals"), KConfig::IncludeGlobals); + KConfigGroup configGroup(globalConfig, QStringLiteral("KDE")); + updateAnimationDuration(configGroup.readEntry("SmoothScroll", true)); + + QDBusConnection::sessionBus().connect(QStringLiteral(""), + QStringLiteral("/SmoothScroll"), + QStringLiteral("org.kde.SmoothScroll"), + QStringLiteral("notifyChange"), + this, + SLOT(updateAnimationDuration(bool))); connect(m_animation, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged); m_scrollBar->installEventFilter(this); @@ -177,6 +189,18 @@ void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::Stat } } +void KItemListSmoothScroller::updateAnimationDuration(bool isSmoothScrollingEnabled) +{ + if (isSmoothScrollingEnabled) { + // Breeze sets SH_Widget_Animation_Duration from the KDE global animation speed setting + const int animationDuration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, m_scrollBar); + const bool animationEnabled = (animationDuration > 0); + m_animation->setDuration(animationEnabled ? animationDuration : 1); + } else { + m_animation->setDuration(1); + } +} + void KItemListSmoothScroller::handleWheelEvent(QWheelEvent *event) { const bool previous = m_smoothScrolling; -- cgit v1.3