summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-09 01:32:25 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-10-09 01:32:25 +0300
commitac8e42b9265bbdc2b3a386e01787a6ee9cfb0180 (patch)
tree6c0aadfa77090437af663198b7484e9394a34200
parent76ddfb792b8e99a14b2adae23cfc221314e98f00 (diff)
Reduce timeline flickering
-rw-r--r--include/TimelineView.h7
-rw-r--r--src/TimelineView.cc35
2 files changed, 24 insertions, 18 deletions
diff --git a/include/TimelineView.h b/include/TimelineView.h
index 9b81485d..da73b00a 100644
--- a/include/TimelineView.h
+++ b/include/TimelineView.h
@@ -140,10 +140,9 @@ private:
bool isPaginationInProgress_ = false;
// Keeps track whether or not the user has visited the view.
- bool isInitialized = false;
- bool isTimelineFinished = false;
- bool isInitialSync = true;
- bool isPaginationScrollPending_ = false;
+ bool isInitialized = false;
+ bool isTimelineFinished = false;
+ bool isInitialSync = true;
const int SCROLL_BAR_GAP = 400;
diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index 032d1310..08b46fdd 100644
--- a/src/TimelineView.cc
+++ b/src/TimelineView.cc
@@ -85,19 +85,15 @@ TimelineView::sliderRangeChanged(int min, int max)
if (max - scroll_area_->verticalScrollBar()->value() < SCROLL_BAR_GAP)
scroll_area_->verticalScrollBar()->setValue(max);
- if (isPaginationScrollPending_) {
- isPaginationScrollPending_ = false;
+ int currentHeight = scroll_widget_->size().height();
+ int diff = currentHeight - oldHeight_;
+ int newPosition = oldPosition_ + diff;
- int currentHeight = scroll_widget_->size().height();
- int diff = currentHeight - oldHeight_;
- int newPosition = oldPosition_ + diff;
+ // Keep the scroll bar to the bottom if it hasn't been activated yet.
+ if (oldPosition_ == 0 && !scroll_area_->verticalScrollBar()->isVisible())
+ newPosition = max;
- // Keep the scroll bar to the bottom if it hasn't been activated yet.
- if (oldPosition_ == 0 && !scroll_area_->verticalScrollBar()->isVisible())
- newPosition = max;
-
- scroll_area_->verticalScrollBar()->setValue(newPosition);
- }
+ scroll_area_->verticalScrollBar()->setValue(newPosition);
}
void
@@ -173,6 +169,9 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg
isTimelineFinished = false;
QList<TimelineItem *> items;
+ scroll_widget_->adjustSize();
+ scroll_widget_->update();
+
// Parse in reverse order to determine where we should not show sender's
// name.
auto ii = msgs.chunk().size();
@@ -195,9 +194,8 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg
for (const auto &item : items)
addTimelineItem(item, TimelineDirection::Top);
- prev_batch_token_ = msgs.end();
- isPaginationInProgress_ = false;
- isPaginationScrollPending_ = true;
+ prev_batch_token_ = msgs.end();
+ isPaginationInProgress_ = false;
// Exclude the top stretch.
if (!msgs.chunk().isEmpty() && scroll_layout_->count() > 1)
@@ -465,6 +463,9 @@ TimelineView::addTimelineItem(TimelineItem *item, TimelineDirection direction)
scroll_layout_->addWidget(item);
else
scroll_layout_->insertWidget(1, item);
+
+ scroll_widget_->adjustSize();
+ scroll_widget_->update();
}
void
@@ -488,6 +489,9 @@ 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);
+ scroll_widget_->adjustSize();
+ scroll_widget_->update();
+
lastSender_ = user_id;
PendingMessage message(txn_id, body, "", view_item);
@@ -506,6 +510,9 @@ 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);
+ scroll_widget_->adjustSize();
+ scroll_widget_->update();
+
lastSender_ = user_id;
PendingMessage message(txn_id, url, "", view_item);