]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/private/kitemlistsmoothscroller.cpp
Add explicit moc includes to sources for moc-covered headers
[dolphin.git] / src / kitemviews / private / kitemlistsmoothscroller.cpp
index 6bfdba4c9ae5fbd911716e96c136685e7a5ee22e..3e325b9342d4ae729baed9dc4a31d62e0bbedfeb 100644 (file)
@@ -1,44 +1,29 @@
-/***************************************************************************
- *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #include "kitemlistsmoothscroller.h"
 
 #include <QApplication>
-#include <QEvent>
 #include <QPropertyAnimation>
 #include <QScrollBar>
-#include <QWheelEvent>
 #include <QStyle>
+#include <QWheelEvent>
 
-KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar,
-                                                 QObject* parent) :
-    QObject(parent),
-    m_scrollBarPressed(false),
-    m_smoothScrolling(true),
-    m_scrollBar(scrollBar),
-    m_animation(0)
+KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar *scrollBar, QObject *parent)
+    : QObject(parent)
+    , m_scrollBarPressed(false)
+    , m_smoothScrolling(true)
+    , m_scrollBar(scrollBar)
+    , m_animation(nullptr)
 {
     m_animation = new QPropertyAnimation(this);
-    const int duration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animate, nullptr, m_scrollBar) ? 100 : 1;
-    m_animation->setDuration(duration);
-    connect(m_animation, &QPropertyAnimation::stateChanged,
-            this, &KItemListSmoothScroller::slotAnimationStateChanged);
+    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);
+    connect(m_animation, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged);
 
     m_scrollBar->installEventFilter(this);
 }
@@ -52,22 +37,22 @@ void KItemListSmoothScroller::setScrollBar(QScrollBar *scrollBar)
     m_scrollBar = scrollBar;
 }
 
-QScrollBarKItemListSmoothScroller::scrollBar() const
+QScrollBar *KItemListSmoothScroller::scrollBar() const
 {
     return m_scrollBar;
 }
 
-void KItemListSmoothScroller::setTargetObject(QObjecttarget)
+void KItemListSmoothScroller::setTargetObject(QObject *target)
 {
     m_animation->setTargetObject(target);
 }
 
-QObjectKItemListSmoothScroller::targetObject() const
+QObject *KItemListSmoothScroller::targetObject() const
 {
     return m_animation->targetObject();
 }
 
-void KItemListSmoothScroller::setPropertyName(const QByteArraypropertyName)
+void KItemListSmoothScroller::setPropertyName(const QByteArray &propertyName)
 {
     m_animation->setPropertyName(propertyName);
 }
@@ -79,7 +64,7 @@ QByteArray KItemListSmoothScroller::propertyName() const
 
 void KItemListSmoothScroller::scrollContentsBy(qreal distance)
 {
-    QObjecttarget = targetObject();
+    QObject *target = targetObject();
     if (!target) {
         return;
     }
@@ -156,7 +141,7 @@ bool KItemListSmoothScroller::requestScrollBarUpdate(int newMaximum)
     return true;
 }
 
-bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event)
+bool KItemListSmoothScroller::eventFilter(QObject *obj, QEvent *event)
 {
     Q_ASSERT(obj == m_scrollBar);
 
@@ -181,25 +166,34 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event)
     return QObject::eventFilter(obj, event);
 }
 
-void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::State newState,
-                                                        QAbstractAnimation::State oldState)
+void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
 {
-    Q_UNUSED(oldState);
+    Q_UNUSED(oldState)
     if (newState == QAbstractAnimation::Stopped && m_smoothScrolling && !m_scrollBarPressed) {
         m_smoothScrolling = false;
     }
+    if (newState == QAbstractAnimation::Stopped) {
+        Q_EMIT scrollingStopped();
+    }
 }
 
-void KItemListSmoothScroller::handleWheelEvent(QWheelEventevent)
+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;
 }
 
+#include "moc_kitemlistsmoothscroller.cpp"