From: Peter Penz Date: Sun, 6 Dec 2009 13:05:56 +0000 (+0000) Subject: Respect drag time delay from application before starting the automatic scrolling... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/65d3008d51a83bac99435a486f5e8c5cdb7e92c1 Respect drag time delay from application before starting the automatic scrolling. Thanks to Christoph Feck for the initial patch! CCMAIL: christoph@maxiom.de BUG: 205664 CCBUG: 212989 svn path=/trunk/KDE/kdebase/apps/; revision=1059377 --- diff --git a/src/dolphinviewautoscroller.cpp b/src/dolphinviewautoscroller.cpp index e0ed342dd..45896a5eb 100644 --- a/src/dolphinviewautoscroller.cpp +++ b/src/dolphinviewautoscroller.cpp @@ -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(); @@ -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 diff --git a/src/dolphinviewautoscroller.h b/src/dolphinviewautoscroller.h index a858d27cb..9fd35d494 100644 --- a/src/dolphinviewautoscroller.h +++ b/src/dolphinviewautoscroller.h @@ -20,6 +20,7 @@ #ifndef DOLPHINVIEWAUTOSCROLLER_H #define DOLPHINVIEWAUTOSCROLLER_H +#include #include class QAbstractItemView; @@ -67,10 +68,12 @@ private: private: bool m_rubberBandSelection; bool m_keyPressed; + bool m_initializedTimestamp; int m_horizontalScrollInc; int m_verticalScrollInc; QAbstractItemView* m_itemView; QTimer* m_timer; + QTime m_timestamp; }; #endif