X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/93ce7f40e2d067eba48b317ef4028c2c75eebebd..7eeb8dba6aeba09aa3dfa7fa5f0b00840d4d8317:/src/dolphinviewautoscroller.cpp diff --git a/src/dolphinviewautoscroller.cpp b/src/dolphinviewautoscroller.cpp index cfd3543a5..45896a5eb 100644 --- a/src/dolphinviewautoscroller.cpp +++ b/src/dolphinviewautoscroller.cpp @@ -20,7 +20,7 @@ #include "dolphinviewautoscroller.h" #include -#include +#include #include #include #include @@ -32,10 +32,12 @@ DolphinViewAutoScroller::DolphinViewAutoScroller(QAbstractItemView* parent) : QObject(parent), m_rubberBandSelection(false), m_keyPressed(false), + m_initializedTimestamp(false), m_horizontalScrollInc(0), m_verticalScrollInc(0), m_itemView(parent), - m_timer(0) + m_timer(0), + m_timestamp() { m_itemView->setAutoScroll(false); m_itemView->viewport()->installEventFilter(this); @@ -124,6 +126,10 @@ bool DolphinViewAutoScroller::eventFilter(QObject* watched, QEvent* event) void DolphinViewAutoScroller::scrollViewport() { + if (m_timestamp.elapsed() < QApplication::startDragTime()) { + return; + } + QScrollBar* verticalScrollBar = m_itemView->verticalScrollBar(); if (verticalScrollBar != 0) { const int value = verticalScrollBar->value(); @@ -143,7 +149,7 @@ void DolphinViewAutoScroller::scrollViewport() // update the rubberband. QWidget* viewport = m_itemView->viewport(); const QPoint pos = viewport->mapFromGlobal(QCursor::pos()); - QMouseEvent event(QEvent::MouseMove, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QMouseEvent event(QEvent::MouseMove, pos, Qt::LeftButton, Qt::LeftButton, QApplication::keyboardModifiers()); QCoreApplication::sendEvent(viewport, &event); } } @@ -156,6 +162,7 @@ void DolphinViewAutoScroller::triggerAutoScroll() m_itemView->horizontalScrollBar()->isVisible(); if (!verticalScrolling && !horizontalScrolling) { // no scrollbars are shown at all, so no autoscrolling is necessary + stopAutoScroll(); return; } @@ -170,9 +177,13 @@ void DolphinViewAutoScroller::triggerAutoScroll() if (m_timer->isActive()) { if ((m_horizontalScrollInc == 0) && (m_verticalScrollInc == 0)) { - m_timer->stop(); + stopAutoScroll(); } } else if ((m_horizontalScrollInc != 0) || (m_verticalScrollInc != 0)) { + if (!m_initializedTimestamp) { + m_initializedTimestamp = true; + m_timestamp.start(); + } m_timer->start(); } } @@ -182,6 +193,7 @@ void DolphinViewAutoScroller::stopAutoScroll() m_timer->stop(); m_horizontalScrollInc = 0; m_verticalScrollInc = 0; + m_initializedTimestamp = false; } int DolphinViewAutoScroller::calculateScrollIncrement(int cursorPos, int rangeSize) const