┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private/kitemlistsmoothscroller.cpp
diff options
context:
space:
mode:
authorNathan Misner <[email protected]>2024-07-05 15:49:47 +0000
committerFelix Ernst <[email protected]>2024-07-05 15:49:47 +0000
commitb94b172f5163fe5daab50dc197171d3662ee7c0d (patch)
tree961b0e12ee6e5cc52a1cea7c19a1e86dd92b5902 /src/kitemviews/private/kitemlistsmoothscroller.cpp
parent19e0a829083d72f17830a4af1093d7fb9804ae64 (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.cpp30
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;