]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Respect drag time delay from application before starting the automatic scrolling...
authorPeter Penz <peter.penz19@gmail.com>
Sun, 6 Dec 2009 13:05:56 +0000 (13:05 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sun, 6 Dec 2009 13:05:56 +0000 (13:05 +0000)
CCMAIL: christoph@maxiom.de
BUG: 205664
CCBUG: 212989

svn path=/trunk/KDE/kdebase/apps/; revision=1059377

src/dolphinviewautoscroller.cpp
src/dolphinviewautoscroller.h

index e0ed342dd35e381bd698bf04e290cccbd2cf1282..45896a5eb5cb353087bab4083b0aafaca714b894 100644 (file)
@@ -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
index a858d27cbf8f5c60407e3cad4a1acf075b4b96f9..9fd35d4947b7f7fad50891e4f980b8a76d1d92ca 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef DOLPHINVIEWAUTOSCROLLER_H
 #define DOLPHINVIEWAUTOSCROLLER_H
 
+#include <QTime>
 #include <QObject>
 
 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