summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-05 15:59:24 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-05 15:59:24 +0300
commitaf0f22fc9102e931a0d4cee43f642d084e5e539f (patch)
tree48e88e8163c25920de722ba7d10de7a410a256be /src
parentParse utf-8 data properly (diff)
downloadnheko-af0f22fc9102e931a0d4cee43f642d084e5e539f.tar.xz
Keep fetching history until the scrollbar gets activated
Diffstat (limited to 'src')
-rw-r--r--src/ChatPage.cc2
-rw-r--r--src/RoomInfoListItem.cc10
-rw-r--r--src/TimelineView.cc19
3 files changed, 23 insertions, 8 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index 5a5a497e..dbfa7c5c 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -102,7 +102,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QWidget *parent) splitter->addWidget(sideBar_); splitter->addWidget(content_); - room_list_ = new RoomList(client, this); + room_list_ = new RoomList(client, sideBar_); sideBarMainLayout_->addWidget(room_list_); top_bar_ = new TopRoomBar(this); diff --git a/src/RoomInfoListItem.cc b/src/RoomInfoListItem.cc
index 11d4da57..379e4000 100644 --- a/src/RoomInfoListItem.cc +++ b/src/RoomInfoListItem.cc
@@ -69,6 +69,16 @@ QString RoomInfoListItem::notificationText() return tr("Enable notifications"); } +void RoomInfoListItem::resizeEvent(QResizeEvent *) +{ + // Update ripple's clipping path. + QPainterPath path; + path.addRect(0, 0, width(), height()); + + ripple_overlay_->setClipPath(path); + ripple_overlay_->setClipping(true); +} + void RoomInfoListItem::paintEvent(QPaintEvent *event) { Q_UNUSED(event); diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index 731e7db5..5968f9cf 100644 --- a/src/TimelineView.cc +++ b/src/TimelineView.cc
@@ -65,8 +65,10 @@ void TimelineView::sliderRangeChanged(int min, int max) { Q_UNUSED(min); - if (!scroll_area_->verticalScrollBar()->isVisible()) + if (!scroll_area_->verticalScrollBar()->isVisible()) { + scroll_area_->verticalScrollBar()->setValue(max); return; + } if (max - scroll_area_->verticalScrollBar()->value() < SCROLL_BAR_GAP) scroll_area_->verticalScrollBar()->setValue(max); @@ -84,7 +86,6 @@ void TimelineView::sliderRangeChanged(int min, int max) newPosition = max; scroll_area_->verticalScrollBar()->setValue(newPosition); - fetchHistory(); } } @@ -92,11 +93,14 @@ void TimelineView::fetchHistory() { bool hasEnoughMessages = scroll_area_->verticalScrollBar()->value() != 0; - if (!hasEnoughMessages && !isTimelineFinished && !isPaginationInProgress_) { + if (!hasEnoughMessages && !isTimelineFinished) { isPaginationInProgress_ = true; client_->messages(room_id_, prev_batch_token_); - scroll_area_->verticalScrollBar()->setValue(scroll_area_->verticalScrollBar()->maximum()); + paginationTimer_->start(500); + return; } + + paginationTimer_->stop(); } void TimelineView::scrollDown() @@ -169,10 +173,8 @@ void TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages oldPosition_ = scroll_area_->verticalScrollBar()->value(); oldHeight_ = scroll_widget_->size().height(); - for (const auto &item : items) { - item->adjustSize(); + for (const auto &item : items) addTimelineItem(item, TimelineDirection::Top); - } prev_batch_token_ = msgs.end(); isPaginationInProgress_ = false; @@ -323,6 +325,9 @@ void TimelineView::init() setLayout(top_layout_); + paginationTimer_ = new QTimer(this); + connect(paginationTimer_, &QTimer::timeout, this, &TimelineView::fetchHistory); + connect(client_.data(), &MatrixClient::messagesRetrieved, this, &TimelineView::addBackwardsEvents); connect(scroll_area_->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderMoved(int)));