From aa3357eee12bcd472fbd7ff00c95c1990245ce8e Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 1 Mar 2022 18:38:45 +0300 Subject: [PATCH] Show connecting / proxy status above downloads. Fixes #24125. --- Telegram/SourceFiles/dialogs/dialogs_widget.cpp | 5 +++++ Telegram/SourceFiles/mainwidget.cpp | 4 ++++ .../SourceFiles/window/window_connecting_widget.cpp | 11 ++++++++--- .../SourceFiles/window/window_connecting_widget.h | 2 ++ .../SourceFiles/window/window_session_controller.cpp | 8 ++++++++ .../SourceFiles/window/window_session_controller.h | 5 +++++ 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 46b8c13804..d896719575 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -1706,6 +1706,11 @@ void Widget::updateControlsGeometry() { putBottomButton(_updateTelegram); putBottomButton(_downloadBar); putBottomButton(_loadMoreChats); + const auto bottomSkip = (height() - scrollTop) - scrollHeight; + if (_connecting) { + _connecting->setBottomSkip(bottomSkip); + } + controller()->setConnectingBottomSkip(bottomSkip); auto wasScrollHeight = _scroll->height(); _scroll->setGeometry(0, scrollTop, width(), scrollHeight); _inner->resize(width(), _inner->height()); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 12d0a87776..8fd2428966 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -391,6 +391,10 @@ void MainWidget::setupConnectingWidget() { this, &session().account(), _controller->adaptive().oneColumnValue() | rpl::map(!_1)); + _controller->connectingBottomSkipValue( + ) | rpl::start_with_next([=](int skip) { + _connecting->setBottomSkip(skip); + }, lifetime()); } not_null MainWidget::floatPlayerDelegate() { diff --git a/Telegram/SourceFiles/window/window_connecting_widget.cpp b/Telegram/SourceFiles/window/window_connecting_widget.cpp index 06da3c8720..4b76bbc7a2 100644 --- a/Telegram/SourceFiles/window/window_connecting_widget.cpp +++ b/Telegram/SourceFiles/window/window_connecting_widget.cpp @@ -243,11 +243,12 @@ void ConnectionState::createWidget() { rpl::combine( visibility(), - _parent->heightValue() - ) | rpl::start_with_next([=](float64 visible, int height) { + _parent->heightValue(), + _bottomSkip.value() + ) | rpl::start_with_next([=](float64 visible, int height, int skip) { _widget->moveToLeft(0, anim::interpolate( height - st::connectingMargin.top(), - height - _widget->height(), + height - _widget->height() - skip, visible)); }, _widget->lifetime()); @@ -281,6 +282,10 @@ void ConnectionState::setForceHidden(bool hidden) { } } +void ConnectionState::setBottomSkip(int skip) { + _bottomSkip = skip; +} + void ConnectionState::refreshState() { using Checker = Core::UpdateChecker; const auto state = [&]() -> State { diff --git a/Telegram/SourceFiles/window/window_connecting_widget.h b/Telegram/SourceFiles/window/window_connecting_widget.h index 2aeb310dfd..5c391a9a6e 100644 --- a/Telegram/SourceFiles/window/window_connecting_widget.h +++ b/Telegram/SourceFiles/window/window_connecting_widget.h @@ -30,6 +30,7 @@ public: void raise(); void setForceHidden(bool hidden); + void setBottomSkip(int skip); rpl::lifetime &lifetime() { return _lifetime; @@ -78,6 +79,7 @@ private: const not_null _account; not_null _parent; + rpl::variable _bottomSkip; base::unique_qptr _widget; bool _forceHidden = false; base::Timer _refreshTimer; diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index c2ec19125e..d57e833594 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1500,6 +1500,14 @@ Window::Adaptive &SessionController::adaptive() const { return _window->adaptive(); } +void SessionController::setConnectingBottomSkip(int skip) { + _connectingBottomSkip = skip; +} + +rpl::producer SessionController::connectingBottomSkipValue() const { + return _connectingBottomSkip.value(); +} + QPointer SessionController::show( object_ptr content, Ui::LayerOptions options, diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 207dc8a325..2d6e625817 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -287,6 +287,9 @@ public: return _selectingPeer; } + void setConnectingBottomSkip(int skip); + rpl::producer connectingBottomSkipValue() const; + QPointer show( object_ptr content, Ui::LayerOptions options = Ui::LayerOption::KeepOther, @@ -541,6 +544,8 @@ private: rpl::variable _activeChatsFilter; + rpl::variable _connectingBottomSkip; + PeerData *_showEditPeer = nullptr; rpl::variable _openedFolder;