]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistsmoothscroller.cpp
Clazy fix
[dolphin.git] / src / kitemviews / private / kitemlistsmoothscroller.cpp
index 19d47aac84096c566c760872555963ad13a85658..14a280e33f7005a05829711ad6489fa622eddc5f 100644 (file)
@@ -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(QString(),
+                                          QStringLiteral("/SmoothScroll"),
+                                          QStringLiteral("org.kde.SmoothScroll"),
+                                          QStringLiteral("notifyChange"),
+                                          this,
+                                          SLOT(updateAnimationDuration(bool)));
     connect(m_animation, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged);
 
     m_scrollBar->installEventFilter(this);
@@ -44,6 +56,9 @@ QScrollBar *KItemListSmoothScroller::scrollBar() const
 
 void KItemListSmoothScroller::setTargetObject(QObject *target)
 {
+    if (m_animation->state() == QAbstractAnimation::Running) {
+        m_animation->stop();
+    }
     m_animation->setTargetObject(target);
 }
 
@@ -54,6 +69,9 @@ QObject *KItemListSmoothScroller::targetObject() const
 
 void KItemListSmoothScroller::setPropertyName(const QByteArray &propertyName)
 {
+    if (m_animation->state() == QAbstractAnimation::Running) {
+        m_animation->stop();
+    }
     m_animation->setPropertyName(propertyName);
 }
 
@@ -177,21 +195,37 @@ 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;
 
     m_smoothScrolling = true;
 
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
     QWheelEvent *copy = event->clone();
     QApplication::sendEvent(m_scrollBar, copy);
     event->setAccepted(copy->isAccepted());
-#else
-    QWheelEvent copy = *event;
-    QApplication::sendEvent(m_scrollBar, &copy);
-    event->setAccepted(copy.isAccepted());
-#endif
 
     m_smoothScrolling = previous;
 }
+
+bool KItemListSmoothScroller::isAnimating()
+{
+    if (m_animation) {
+        return (m_animation->state() == QAbstractAnimation::Running);
+    }
+    return false;
+}
+
+#include "moc_kitemlistsmoothscroller.cpp"