From e9a8e51208e168d1bad3220004b31117d27f4ed9 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Fri, 31 Aug 2018 18:34:54 +0300 Subject: [PATCH] Guard against flickering for items added to the top of the timeline --- src/timeline/TimelineView.cpp | 8 ++++---- src/timeline/TimelineView.h | 11 ++++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/timeline/TimelineView.cpp b/src/timeline/TimelineView.cpp index e6c36165..887d4d4f 100644 --- a/src/timeline/TimelineView.cpp +++ b/src/timeline/TimelineView.cpp @@ -634,11 +634,11 @@ TimelineView::addTimelineItem(QWidget *item, TimelineDirection direction) auto separator = new DateSeparator(newDate, this); if (separator) - pushTimelineItem(separator); + pushTimelineItem(separator, direction); } } - pushTimelineItem(item); + pushTimelineItem(item, direction); } else { if (scroll_layout_->count() > 0) { const auto firstItem = scroll_layout_->itemAt(0)->widget(); @@ -650,12 +650,12 @@ TimelineView::addTimelineItem(QWidget *item, TimelineDirection direction) auto separator = new DateSeparator(oldDate); if (separator) - scroll_layout_->insertWidget(0, separator); + pushTimelineItem(separator, direction); } } } - scroll_layout_->insertWidget(0, item); + pushTimelineItem(item, direction); } } diff --git a/src/timeline/TimelineView.h b/src/timeline/TimelineView.h index 46facd7e..c1d36cf8 100644 --- a/src/timeline/TimelineView.h +++ b/src/timeline/TimelineView.h @@ -194,17 +194,22 @@ private: void getMessages(); //! HACK: Fixing layout flickering when adding to the bottom //! of the timeline. - void pushTimelineItem(QWidget *item) + void pushTimelineItem(QWidget *item, TimelineDirection dir) { setUpdatesEnabled(false); item->hide(); - scroll_layout_->addWidget(item); + + if (dir == TimelineDirection::Top) + scroll_layout_->insertWidget(0, item); + else + scroll_layout_->addWidget(item); + QTimer::singleShot(0, this, [item, this]() { item->show(); item->adjustSize(); setUpdatesEnabled(true); }); - }; + } //! Decides whether or not to show or hide the scroll down button. void toggleScrollDownButton();