From 26540bd12081d3144e8cf4c27cc8b413e2fe5659 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Tue, 16 Jan 2018 22:24:23 +0200 Subject: [PATCH] Hack to work around layout flickering when adding new timeline items --- include/timeline/TimelineView.h | 14 +++++++++++++- src/timeline/TimelineView.cc | 5 +++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/timeline/TimelineView.h b/include/timeline/TimelineView.h index c120ed69..1ebf6eb7 100644 --- a/include/timeline/TimelineView.h +++ b/include/timeline/TimelineView.h @@ -123,6 +123,17 @@ protected: private: using TimelineEvent = mtx::events::collections::TimelineEvents; + //! HACK: Fixing layout flickering when adding to the bottom + //! of the timeline. + void pushTimelineItem(TimelineItem *item) + { + item->hide(); + QTimer::singleShot(0, this, [=]() { + scroll_layout_->addWidget(item); + item->show(); + }); + }; + void init(); void addTimelineItem(TimelineItem *item, TimelineDirection direction); void updateLastSender(const QString &user_id, TimelineDirection direction); @@ -229,7 +240,8 @@ TimelineView::addUserMessage(const QString &url, TimelineItem *view_item = new TimelineItem(widget, local_user_, with_sender, scroll_widget_); - scroll_layout_->addWidget(view_item); + + pushTimelineItem(view_item); lastMessageDirection_ = TimelineDirection::Bottom; diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc index f4cc2d2e..a085b1e0 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc @@ -433,7 +433,7 @@ TimelineView::addTimelineItem(TimelineItem *item, TimelineDirection direction) addDateSeparator(newDate, lastItemPosition); } - scroll_layout_->addWidget(item); + pushTimelineItem(item); } else { // The first item (position 0) is a stretch widget that pushes // the widgets to the bottom of the page. @@ -479,7 +479,8 @@ TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body) TimelineItem *view_item = new TimelineItem(ty, local_user_, body, with_sender, scroll_widget_); - scroll_layout_->addWidget(view_item); + + pushTimelineItem(view_item); lastMessageDirection_ = TimelineDirection::Bottom;