Change Selection Behaviour
authorromibi <romibi@bluewin.ch>
Fri, 19 Feb 2016 19:47:52 +0000 (20:47 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 15 Jun 2016 19:53:16 +0000 (21:53 +0200)
Before: (slow) double tap for selection
After: start movement horizontal

src/qtui/chatview.cpp
src/qtui/chatview.h
src/uisupport/treeviewtouch.cpp
src/uisupport/treeviewtouch.h

index 075238c..5e76a33 100644 (file)
@@ -109,10 +109,9 @@ bool ChatView::event(QEvent *event)
         }
     }
 
         }
     }
 
-    if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select text. 1000 ok?
+    if (event->type() == QEvent::TouchBegin) {
         setDragMode(QGraphicsView::ScrollHandDrag);
         setInteractive(false);
         setDragMode(QGraphicsView::ScrollHandDrag);
         setInteractive(false);
-        _lastTouchStart = QDateTime::currentMSecsSinceEpoch();
         if (verticalScrollBar()->isVisible()) return true; //if scrollbar is not visible we need to request backlog below
     }
 
         if (verticalScrollBar()->isVisible()) return true; //if scrollbar is not visible we need to request backlog below
     }
 
@@ -123,9 +122,23 @@ bool ChatView::event(QEvent *event)
 #endif
         setDragMode(QGraphicsView::NoDrag);
         setInteractive(true);
 #endif
         setDragMode(QGraphicsView::NoDrag);
         setInteractive(true);
+               _firstTouchUpdateHappened = false;
         return true;
     }
 
         return true;
     }
 
+       if (event->type() == QEvent::TouchUpdate) {
+               if (!_firstTouchUpdateHappened) {
+                       QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0);
+                       double dx = abs (p.lastPos().x() - p.pos().x());
+                       double dy = abs (p.lastPos().y() - p.pos().y());
+                       if (dx > dy) {
+                               setDragMode(QGraphicsView::NoDrag);
+                               setInteractive(true);
+                       }
+                       _firstTouchUpdateHappened = true;
+               }
+       }
+
     if (event->type() == QEvent::Wheel || event->type() == QEvent::TouchBegin || event->type() == QEvent::TouchUpdate) {
         if (!verticalScrollBar()->isVisible()) {
             scene()->requestBacklog();
     if (event->type() == QEvent::Wheel || event->type() == QEvent::TouchBegin || event->type() == QEvent::TouchUpdate) {
         if (!verticalScrollBar()->isVisible()) {
             scene()->requestBacklog();
index 76cefd0..e037e46 100644 (file)
@@ -117,7 +117,7 @@ private:
     int _scrollOffset;
     bool _invalidateFilter;
     QSet<ChatLine *> _linesWithCache;
     int _scrollOffset;
     bool _invalidateFilter;
     QSet<ChatLine *> _linesWithCache;
-       qint64 _lastTouchStart = 0;
+       bool _firstTouchUpdateHappened = false;
 };
 
 
 };
 
 
index adfb917..6b795f5 100644 (file)
@@ -31,15 +31,22 @@ TreeViewTouch::TreeViewTouch(QWidget *parent)
 
 
 bool TreeViewTouch::event(QEvent *event) {
 
 
 bool TreeViewTouch::event(QEvent *event) {
-       if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select multiple. 1000 ok?
+       if (event->type() == QEvent::TouchBegin) {
                _touchScrollInProgress = true;
                _touchScrollInProgress = true;
-               _lastTouchStart = QDateTime::currentMSecsSinceEpoch();
                setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
                return true;
        }
 
        if (event->type() == QEvent::TouchUpdate && _touchScrollInProgress) {
                QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0);
                setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
                return true;
        }
 
        if (event->type() == QEvent::TouchUpdate && _touchScrollInProgress) {
                QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0);
+               if (!_firstTouchUpdateHappened) {
+                       double dx = abs(p.lastPos().x() - p.pos().x());
+                       double dy = abs(p.lastPos().y() - p.pos().y());
+                       if (dx > dy) {
+                               _touchScrollInProgress = false;
+                       }
+                       _firstTouchUpdateHappened = true;
+               }
                verticalScrollBar()->setValue(verticalScrollBar()->value() - (p.pos().y() - p.lastPos().y()));
                return true;
        }
                verticalScrollBar()->setValue(verticalScrollBar()->value() - (p.pos().y() - p.lastPos().y()));
                return true;
        }
@@ -50,6 +57,7 @@ bool TreeViewTouch::event(QEvent *event) {
     if (event->type() == QEvent::TouchEnd) {
 #endif
                _touchScrollInProgress = false;
     if (event->type() == QEvent::TouchEnd) {
 #endif
                _touchScrollInProgress = false;
+               _firstTouchUpdateHappened = false;
                return true;
        }
 
                return true;
        }
 
index e843144..efbdf4a 100644 (file)
@@ -36,8 +36,8 @@ protected:
        virtual void mousePressEvent(QMouseEvent *event);
 
 private:
        virtual void mousePressEvent(QMouseEvent *event);
 
 private:
-       qint64 _lastTouchStart = 0;
        bool _touchScrollInProgress = false;
        bool _touchScrollInProgress = false;
+       bool _firstTouchUpdateHappened = false;
 };
 
 #endif
\ No newline at end of file
 };
 
 #endif
\ No newline at end of file