From c61e1b9139e89c7b95b498d228d90436dbb1303d Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 27 Jun 2023 19:40:45 +0400 Subject: [PATCH] Don't scroll through from chats list to stories. --- .../SourceFiles/dialogs/dialogs_widget.cpp | 28 +++++++++++++++++++ Telegram/SourceFiles/dialogs/dialogs_widget.h | 2 ++ Telegram/lib_ui | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 03679cfb8..9268b4fcd 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -73,11 +73,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/qt/qt_common_adapters.h" #include +#include namespace Dialogs { namespace { constexpr auto kSearchPerPage = 50; +constexpr auto kWaitTillAllowStoriesExpand = crl::time(200); } // namespace @@ -208,6 +210,9 @@ Widget::Widget( , _cancelSearch(_searchControls, st::dialogsCancelSearch) , _lockUnlock(_searchControls, st::dialogsLock) , _scroll(this) +, _allowStoriesExpandTimer([=] { + _scroll->verticalScrollBar()->setMinimum(0); +}) , _scrollToTop(_scroll, st::dialogsToUp) , _searchTimer([=] { searchMessages(); }) , _singleMessageSearch(&controller->session()) { @@ -319,6 +324,9 @@ Widget::Widget( ) | rpl::start_with_next([=] { listScrollUpdated(); }, lifetime()); + _scroll->setCustomWheelProcess([=](not_null e) { + return customWheelProcess(e); + }); session().data().chatsListChanges( ) | rpl::filter([=](Data::Folder *folder) { @@ -1122,6 +1130,9 @@ void Widget::jumpToTop(bool belowPinned) { } void Widget::scrollToDefault(bool verytop) { + if (verytop) { + _scroll->verticalScrollBar()->setMinimum(0); + } _scrollToAnimation.stop(); auto scrollTop = _scroll->scrollTop(); const auto scrollTo = verytop ? 0 : _inner->defaultScrollTop(); @@ -2365,6 +2376,23 @@ void Widget::completeHashtag(QString tag) { applyFilterUpdate(true); } +bool Widget::customWheelProcess(not_null e) { + const auto now = _scroll->scrollTop(); + const auto def = _inner->defaultScrollTop(); + const auto bar = _scroll->verticalScrollBar(); + const auto allow = (def <= 0) + || (now < def) + || (now == def && !_allowStoriesExpandTimer.isActive()); + if (allow) { + _scroll->verticalScrollBar()->setMinimum(0); + _allowStoriesExpandTimer.cancel(); + } else { + bar->setMinimum(def); + _allowStoriesExpandTimer.callOnce(kWaitTillAllowStoriesExpand); + } + return false; +} + void Widget::resizeEvent(QResizeEvent *e) { updateControlsGeometry(); } diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index 891afef3a..11a9e4648 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -136,6 +136,7 @@ private: void cancelSearchInChat(); void filterCursorMoved(); void completeHashtag(QString tag); + bool customWheelProcess(not_null e); [[nodiscard]] QString currentSearchQuery() const; void clearSearchField(); @@ -245,6 +246,7 @@ private: std::unique_ptr _forumReportBar; object_ptr _scroll; + base::Timer _allowStoriesExpandTimer; QPointer _inner; class BottomButton; object_ptr _updateTelegram = { nullptr }; diff --git a/Telegram/lib_ui b/Telegram/lib_ui index fc8d4d25d..8908c9b5c 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit fc8d4d25dee6e3ded99749c06fd870e6df4615f8 +Subproject commit 8908c9b5c041f51176383a55e0b324588b28b68d