case Qt::Key_Down:
case Qt::Key_PageUp:
case Qt::Key_PageDown:
- if (!verticalScrollBar()->isVisible()) {
- scene()->requestBacklog();
+ if (requestBacklogForScroll()) {
return true;
}
default:
if (event->type() == QEvent::Wheel
|| (event->type() == QEvent::TouchBegin && ((QTouchEvent*)event)->device()->type() == QTouchDevice::TouchScreen)
|| event->type() == QEvent::TouchUpdate) {
- if (!verticalScrollBar()->isVisible()) {
- scene()->requestBacklog();
+ if (requestBacklogForScroll()) {
return true;
}
}
_linesWithCache.remove(line);
}
+bool ChatView::requestBacklogForScroll()
+{
+ if (!verticalScrollBar()->isVisible()) {
+ // Not able to scroll, fetch backlog
+ //
+ // Future improvement: continue fetching backlog in chunks until the scrollbar is visible,
+ // or the beginning of the buffer has been reached.
+ scene()->requestBacklog();
+ // Backlog has been requested
+ return true;
+ }
+ else {
+ // Scrollbar already visible, no backlog requested
+ return false;
+ }
+}
+
void ChatView::checkChatLineCaches()
{
qreal top = mapToScene(viewport()->rect().topLeft()).y() - 10; // some grace area to avoid premature cleaning