diff --git a/include/timeline/TimelineView.h b/include/timeline/TimelineView.h index 52bf0165..faada44c 100644 --- a/include/timeline/TimelineView.h +++ b/include/timeline/TimelineView.h @@ -27,13 +27,14 @@ #include #include -#include +#include +#include #include "MatrixClient.h" +#include "ScrollBar.h" #include "TimelineItem.h" class FloatingButton; -class ScrollBar; struct DescInfo; // Contains info about a message shown in the history view @@ -122,6 +123,7 @@ private: void updateLastSender(const QString &user_id, TimelineDirection direction); void notifyForLastEvent(); void readLastEvent() const; + bool isScrollbarActivated() { return scroll_area_->verticalScrollBar()->value() != 0; } QString getLastEventId() const; QString getEventSender(const mtx::events::collections::TimelineEvents &event) const; diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc index dd51fc52..dccc6f37 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc @@ -21,7 +21,6 @@ #include "FloatingButton.h" #include "RoomMessages.h" -#include "ScrollBar.h" #include "timeline/TimelineView.h" #include "timeline/widgets/AudioItem.h" @@ -83,12 +82,18 @@ TimelineView::sliderRangeChanged(int min, int max) void TimelineView::fetchHistory() { - bool hasEnoughMessages = scroll_area_->verticalScrollBar()->isVisible(); + if (!isScrollbarActivated() && !isTimelineFinished) { + if (!isVisible()) { + // Check again later if the timeline became visible. + // TODO: Use a backoff strategy. + paginationTimer_->start(3000); + return; + } - if (!hasEnoughMessages && !isTimelineFinished) { isPaginationInProgress_ = true; client_->messages(room_id_, prev_batch_token_); - paginationTimer_->start(500); + paginationTimer_->start(1500); + return; }