From: romibi Date: Fri, 10 Jun 2016 23:48:11 +0000 (+0200) Subject: Enable Touch Scroll in Nick-View X-Git-Tag: travis-deploy-test~476 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=7582027d5f569c8487d17959d6aa9e6ca6d2aa33 Enable Touch Scroll in Nick-View --- diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index b1a5a4d1..ea29d3fe 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include "buffermodel.h" #include "client.h" @@ -72,6 +74,7 @@ void NickView::init() connect(selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), SIGNAL(selectionUpdated())); connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SIGNAL(selectionUpdated())); + setAttribute(Qt::WA_AcceptTouchEvents); } @@ -150,3 +153,39 @@ void NickView::startQuery(const QModelIndex &index) Client::bufferModel()->switchToOrStartQuery(networkId, ircUser->nick()); } + +bool NickView::event(QEvent *event) { + if (event->type() == QEvent::TouchBegin && _lastTouchStart < QDateTime::currentMSecsSinceEpoch() - 1000) { //(slow) double tab = normal behaviour = select multiple. 1000 ok? + _touchScrollInProgress = true; + _lastTouchStart = QDateTime::currentMSecsSinceEpoch(); + setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + return true; + } + + if (event->type() == QEvent::TouchUpdate && _touchScrollInProgress) { + QTouchEvent::TouchPoint p = ((QTouchEvent*)event)->touchPoints().at(0); + verticalScrollBar()->setValue(verticalScrollBar()->value() - (p.pos().y() - p.lastPos().y())); + return true; + } + +#if QT_VERSION >= 0x050000 + if (event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel) { +#else + if (event->type() == QEvent::TouchEnd) { +#endif + _touchScrollInProgress = false; + return true; + } + + return QTreeView::event(event); +} + +void NickView::mousePressEvent(QMouseEvent * event) { + if (!_touchScrollInProgress) + QTreeView::mousePressEvent(event); +} + +void NickView::mouseMoveEvent(QMouseEvent * event) { + if (!_touchScrollInProgress) + QTreeView::mouseMoveEvent(event); +} diff --git a/src/uisupport/nickview.h b/src/uisupport/nickview.h index bb1c948e..8638039a 100644 --- a/src/uisupport/nickview.h +++ b/src/uisupport/nickview.h @@ -37,6 +37,9 @@ protected: //! This reimplementation ensures that the current index is first in list virtual QModelIndexList selectedIndexes() const; + virtual bool event(QEvent *event); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual void mousePressEvent(QMouseEvent *event); void unanimatedExpandAll(); @@ -52,6 +55,8 @@ signals: private: friend class NickListWidget; // needs selectedIndexes() + qint64 _lastTouchStart = 0; + bool _touchScrollInProgress = false; };