summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-27 13:36:26 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-27 13:36:26 +0300
commit8e15a5080d0d2db77684e22d4cb7297a7aeff8f4 (patch)
tree61eb9353b1ba6777e721a77a81a18120953095cb
parentc6e1068e0e1cb8ff5d5982ccd1683b1900dd7114 (diff)
Adjust scrollbar only after pagination (#94)
The scrollbar will stay in the same position if new messages are added to the bottom of the timeline.
-rw-r--r--include/TimelineView.h2
-rw-r--r--src/TimelineView.cc11
2 files changed, 12 insertions, 1 deletions
diff --git a/include/TimelineView.h b/include/TimelineView.h
index 55f25687..400b0db0 100644
--- a/include/TimelineView.h
+++ b/include/TimelineView.h
@@ -155,6 +155,8 @@ private:
int oldPosition_;
int oldHeight_;
+ TimelineDirection lastMessageDirection_;
+
// The events currently rendered. Used for duplicate detection.
QMap<QString, bool> eventIds_;
QList<PendingMessage> pending_msgs_;
diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index 5463064f..2142f546 100644
--- a/src/TimelineView.cc
+++ b/src/TimelineView.cc
@@ -96,7 +96,8 @@ TimelineView::sliderRangeChanged(int min, int max)
if (oldPosition_ == 0 && !scroll_area_->verticalScrollBar()->isVisible())
newPosition = max;
- scroll_area_->verticalScrollBar()->setValue(newPosition);
+ if (lastMessageDirection_ == TimelineDirection::Top)
+ scroll_area_->verticalScrollBar()->setValue(newPosition);
}
void
@@ -194,6 +195,8 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg
for (const auto &item : items)
addTimelineItem(item, TimelineDirection::Top);
+ lastMessageDirection_ = TimelineDirection::Top;
+
QApplication::processEvents();
prev_batch_token_ = msgs.end();
@@ -349,6 +352,8 @@ TimelineView::addEvents(const Timeline &timeline)
}
}
+ lastMessageDirection_ = TimelineDirection::Bottom;
+
QApplication::processEvents();
if (isInitialSync) {
@@ -490,6 +495,8 @@ TimelineView::addUserMessage(matrix::events::MessageEventType ty, const QString
TimelineItem *view_item = new TimelineItem(ty, user_id, body, with_sender, scroll_widget_);
scroll_layout_->addWidget(view_item);
+ lastMessageDirection_ = TimelineDirection::Bottom;
+
QApplication::processEvents();
lastSender_ = user_id;
@@ -510,6 +517,8 @@ TimelineView::addUserMessage(const QString &url, const QString &filename, int tx
TimelineItem *view_item = new TimelineItem(image, user_id, with_sender, scroll_widget_);
scroll_layout_->addWidget(view_item);
+ lastMessageDirection_ = TimelineDirection::Bottom;
+
QApplication::processEvents();
lastSender_ = user_id;