/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
_currentScaleFactor = 1;
_invalidateFilter = false;
+ setAttribute(Qt::WA_AcceptTouchEvents);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setAlignment(Qt::AlignLeft|Qt::AlignBottom);
setScene(_scene);
connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(verticalScrollbarChanged(int)));
- _lastScrollbarPos = verticalScrollBar()->value();
+ _lastScrollbarPos = verticalScrollBar()->maximum();
connect(Client::networkModel(), SIGNAL(markerLineSet(BufferId, MsgId)), SLOT(markerLineSet(BufferId, MsgId)));
}
}
- 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;
void ChatView::resizeEvent(QResizeEvent *event)
{
+ // if view is currently scrolled to bottom, we want it that way after resizing
+ bool atBottom = (_lastScrollbarPos == verticalScrollBar()->maximum());
+
QGraphicsView::resizeEvent(event);
- // FIXME: do we really need to scroll down on resize?
+ // if scrolling to bottom, do it immediately.
+ if(atBottom)
+ {
+ // we can reduce viewport updates if we scroll to the bottom allready at the beginning
+ verticalScrollBar()->setValue(verticalScrollBar()->maximum());
+ }
- // we can reduce viewport updates if we scroll to the bottom allready at the beginning
- verticalScrollBar()->setValue(verticalScrollBar()->maximum());
scene()->updateForViewport(viewport()->width(), viewport()->height());
adjustSceneRect();
- _lastScrollbarPos = verticalScrollBar()->maximum();
- verticalScrollBar()->setValue(verticalScrollBar()->maximum());
-
+ if(atBottom)
+ {
+ _lastScrollbarPos = verticalScrollBar()->maximum();
+ verticalScrollBar()->setValue(verticalScrollBar()->maximum());
+ }
checkChatLineCaches();
}