diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 884b8a055..161a4eb3b 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -333,7 +333,25 @@ void DialogsWidget::dialogsToUp() { return; } if (_filter->getLastText().trimmed().isEmpty() && !_searchInChat) { - _scroll->scrollToY(0); + _scrollToAnimation.finish(); + auto scrollTop = _scroll->scrollTop(); + const auto scrollTo = 0; + const auto maxAnimatedDelta = _scroll->height(); + if (scrollTo + maxAnimatedDelta < scrollTop) { + scrollTop = scrollTo + maxAnimatedDelta; + _scroll->scrollToY(scrollTop); + } + + const auto scroll = [&] { + _scroll->scrollToY(qRound(_scrollToAnimation.current())); + }; + + _scrollToAnimation.start( + scroll, + scrollTop, + scrollTo, + st::slideDuration, + anim::sineInOut); } } diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index df43b2bfc..faad0637c 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -199,6 +199,7 @@ private: object_ptr _loadMoreChats = { nullptr }; std::unique_ptr _connecting; + Animation _scrollToAnimation; Animation _a_show; Window::SlideDirection _showDirection; QPixmap _cacheUnder, _cacheOver;