diff options
| author | Nathan Misner <[email protected]> | 2024-07-05 15:49:47 +0000 |
|---|---|---|
| committer | Felix Ernst <[email protected]> | 2024-07-05 15:49:47 +0000 |
| commit | b94b172f5163fe5daab50dc197171d3662ee7c0d (patch) | |
| tree | 961b0e12ee6e5cc52a1cea7c19a1e86dd92b5902 /src/kitemviews/private/kitemlistsmoothscroller.cpp | |
| parent | 19e0a829083d72f17830a4af1093d7fb9804ae64 (diff) | |
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.
Diffstat (limited to 'src/kitemviews/private/kitemlistsmoothscroller.cpp')
| -rw-r--r-- | src/kitemviews/private/kitemlistsmoothscroller.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
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 <KConfigGroup> +#include <KSharedConfig> + #include <QApplication> +#include <QDBusConnection> #include <QPropertyAnimation> #include <QScrollBar> #include <QStyle> @@ -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; |
