X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/81b84a1eaf9fcfc3c2318b7ab4d30c7c578e9680..848abc5922167a467bb73107ee6b72e9af3c8317:/src/kitemviews/private/kitemlistsmoothscroller.cpp diff --git a/src/kitemviews/private/kitemlistsmoothscroller.cpp b/src/kitemviews/private/kitemlistsmoothscroller.cpp index 24eea0cef..f1f6145c4 100644 --- a/src/kitemviews/private/kitemlistsmoothscroller.cpp +++ b/src/kitemviews/private/kitemlistsmoothscroller.cpp @@ -19,13 +19,11 @@ #include "kitemlistsmoothscroller.h" -#include -#include +#include #include #include #include - -#include +#include KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar, QObject* parent) : @@ -33,11 +31,17 @@ KItemListSmoothScroller::KItemListSmoothScroller(QScrollBar* scrollBar, m_scrollBarPressed(false), m_smoothScrolling(true), m_scrollBar(scrollBar), - m_animation(0) + m_animation(nullptr) { m_animation = new QPropertyAnimation(this); - const int duration = (KGlobalSettings::graphicEffectsLevel() == KGlobalSettings::NoEffects) ? 1 : 100; - m_animation->setDuration(duration); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + const int animationDuration = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, m_scrollBar); + const bool animationEnabled = (animationDuration > 0); + #else + const int animationDuration = 100; + const bool animationEnabled = m_scrollBar->style()->styleHint(QStyle::SH_Widget_Animate, nullptr, m_scrollBar); +#endif + m_animation->setDuration(animationEnabled ? animationDuration : 1); connect(m_animation, &QPropertyAnimation::stateChanged, this, &KItemListSmoothScroller::slotAnimationStateChanged); @@ -173,8 +177,7 @@ bool KItemListSmoothScroller::eventFilter(QObject* obj, QEvent* event) break; case QEvent::Wheel: - handleWheelEvent(static_cast(event)); - break; + return false; // we're the ones sending them default: break; @@ -194,18 +197,14 @@ void KItemListSmoothScroller::slotAnimationStateChanged(QAbstractAnimation::Stat void KItemListSmoothScroller::handleWheelEvent(QWheelEvent* event) { - const int numDegrees = event->delta() / 8; - const int numSteps = numDegrees / 15; - const bool previous = m_smoothScrolling; m_smoothScrolling = true; - const int value = m_scrollBar->value(); - const int pageStep = m_scrollBar->pageStep(); - m_scrollBar->setValue(value - numSteps * pageStep); - m_smoothScrolling = previous; + QWheelEvent copy = *event; + QApplication::sendEvent(m_scrollBar, ©); + event->setAccepted(copy.isAccepted()); - event->accept(); + m_smoothScrolling = previous; }