X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fchatview.cpp;h=23703113f064937e2f66bf1d1991e001f861441d;hb=92fc8c5b119111a35ab8423c3cbde5b2a022badf;hp=5e76a336ba0c308e4996855e1a7190f7925fc5b3;hpb=eb1db9563e94831770974fcbdb864d855c73017a;p=quassel.git diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 5e76a336..23703113 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -109,37 +109,39 @@ bool ChatView::event(QEvent *event) } } - if (event->type() == QEvent::TouchBegin) { + if (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->device()->type() == QTouchDevice::TouchScreen) { + // Enable scrolling by draging, disable selecting/clicking content setDragMode(QGraphicsView::ScrollHandDrag); setInteractive(false); - 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 if (event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel) { -#else - if (event->type() == QEvent::TouchEnd) { -#endif + // End scroll and reset settings to default setDragMode(QGraphicsView::NoDrag); setInteractive(true); - _firstTouchUpdateHappened = false; + _firstTouchUpdateHappened = false; 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 (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 (event->type() == QEvent::Wheel || (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->device()->type() == QTouchDevice::TouchScreen) || event->type() == QEvent::TouchUpdate) { if (!verticalScrollBar()->isVisible()) { scene()->requestBacklog(); return true;