From 29c7d46de1bb0703e51033ddcec34cb785d6f8c6 Mon Sep 17 00:00:00 2001 From: romibi Date: Wed, 17 Feb 2016 13:54:18 +0100 Subject: [PATCH] Enable Touch Scroll in Chat-View --- src/qtui/chatview.cpp | 20 +++++++++++++++++++- src/qtui/chatview.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/qtui/chatview.cpp b/src/qtui/chatview.cpp index 3ac00bb0..075238c1 100644 --- a/src/qtui/chatview.cpp +++ b/src/qtui/chatview.cpp @@ -59,6 +59,7 @@ void ChatView::init(MessageFilter *filter) _currentScaleFactor = 1; _invalidateFilter = false; + setAttribute(Qt::WA_AcceptTouchEvents); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); setAlignment(Qt::AlignLeft|Qt::AlignBottom); @@ -108,7 +109,24 @@ bool ChatView::event(QEvent *event) } } - if (event->type() == QEvent::Wheel) { + if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select text. 1000 ok? + 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 QT_VERSION >= 0x050000 + if (event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel) { +#else + if (event->type() == QEvent::TouchEnd) { +#endif + setDragMode(QGraphicsView::NoDrag); + setInteractive(true); + return true; + } + + if (event->type() == QEvent::Wheel || event->type() == QEvent::TouchBegin || event->type() == QEvent::TouchUpdate) { if (!verticalScrollBar()->isVisible()) { scene()->requestBacklog(); return true; diff --git a/src/qtui/chatview.h b/src/qtui/chatview.h index 8629a50c..76cefd0d 100644 --- a/src/qtui/chatview.h +++ b/src/qtui/chatview.h @@ -117,6 +117,7 @@ private: int _scrollOffset; bool _invalidateFilter; QSet _linesWithCache; + qint64 _lastTouchStart = 0; }; -- 2.20.1