diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index bdcf93a03..e951cd802 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -589,6 +589,7 @@ void ListWidget::refreshRows(const Data::MessagesSlice &old) { auto destroyingBarElement = _bar.element; auto clearingOverElement = _overElement; + _itemsKnownTillEnd = (_slice.skippedAfter == 0); _resizePending = true; _items.clear(); _items.reserve(_slice.ids.size()); @@ -1107,7 +1108,7 @@ void ListWidget::applyUpdatedScrollState() { } void ListWidget::updateVisibleTopItem() { - if (_visibleBottom == height()) { + if (_itemsKnownTillEnd && _visibleBottom == height()) { _visibleTopItem = nullptr; } else if (_items.empty()) { _visibleTopItem = nullptr; @@ -2558,7 +2559,8 @@ Element *ListWidget::strictFindItemByY(int y) const { } auto ListWidget::countScrollState() const -> ScrollTopState { - if (_items.empty() || _visibleBottom == height()) { + if (_items.empty() + || (_itemsKnownTillEnd && _visibleBottom == height())) { return { Data::MessagePosition(), 0 }; } const auto topItem = findItemByY(_visibleTop); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index f88582722..bd8ad7827 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -727,6 +727,8 @@ private: int _aroundIndex = -1; int _idsLimit = kMinimalIdsLimit; Data::MessagesSlice _slice; + bool _itemsKnownTillEnd = false; + std::vector> _items; ViewsMap _views, _viewsCapacity; int _itemsTop = 0;