X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatview.cpp;h=aa507e8104149d20103fa2322919a87711afcd38;hb=b263b745afcc8272a4eeb35e188e73fb45879642;hp=5f89e11c9ad0853082fb931f95ae8fc25b44b2bf;hpb=d04e108c6bf0405c4a4855d3c4d2df7beb817b40;p=quassel.git diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 5f89e11c..aa507e81 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -109,11 +109,17 @@ bool ChatView::event(QEvent *event) } } - if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select text. 1000 ok? +#if QT_VERSION >= 0x050000 + if (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->device()->type()==QTouchDevice::TouchScreen) { +#else + if (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->deviceType()==QTouchEvent::TouchScreen) { +#endif + // Enable scrolling by draging, disable selecting/clicking content 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 scrollbar is not visible we need to request backlog below else we need to accept + // the event now (return true) so that we will receive TouchUpdate and TouchEnd/TouchCancel + if (verticalScrollBar()->isVisible()) return true; } #if QT_VERSION >= 0x050000 @@ -121,12 +127,33 @@ bool ChatView::event(QEvent *event) #else if (event->type() == QEvent::TouchEnd) { #endif + // End scroll and reset settings to default setDragMode(QGraphicsView::NoDrag); setInteractive(true); + _firstTouchUpdateHappened = false; return true; } - if (event->type() == QEvent::Wheel || event->type() == QEvent::TouchBegin || event->type() == QEvent::TouchUpdate) { + if (event->type() == QEvent::TouchUpdate) { + if (!_firstTouchUpdateHappened) { + // After the first movement of a Touch-Point, calculate the distance in both axis + // and if the point moved more horizontally abort scroll. + QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0); + double dx = qAbs(p.lastPos().x() - p.pos().x()); + double dy = qAbs(p.lastPos().y() - p.pos().y()); + if (dx > dy) { + setDragMode(QGraphicsView::NoDrag); + setInteractive(true); + } + _firstTouchUpdateHappened = true; + } + // Applying the movement happens automatically by the drag-mode + } +#if QT_VERSION >= 0x050000 + if (event->type() == QEvent::Wheel || (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->device()->type()==QTouchDevice::TouchScreen) || event->type() == QEvent::TouchUpdate) { +#else + if (event->type() == QEvent::Wheel || (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->deviceType()==QTouchEvent::TouchScreen) || event->type() == QEvent::TouchUpdate) { +#endif if (!verticalScrollBar()->isVisible()) { scene()->requestBacklog(); return true;