X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnickview.cpp;h=ea29d3fe5e7fb99d629feb127a2bf675121a7312;hp=bdec1872dcb21bed922c8b5a64b707a999313d29;hb=7582027d5f569c8487d17959d6aa9e6ca6d2aa33;hpb=5b686746c880e5cda6d5de3e08180ea4332ff222 diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index bdec1872..ea29d3fe 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2012 by the Quassel Project * + * Copyright (C) 2005-2016 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -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); +}