From 63014adfef153befbfbe901756fae52af55ae387 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 22 Nov 2025 13:01:30 +0300 Subject: [PATCH] Fixed rpl trigger for back button in profile top bar. --- .../info/profile/info_profile_top_bar.cpp | 15 ++++++--------- .../info/profile/info_profile_top_bar.h | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/info/profile/info_profile_top_bar.cpp b/Telegram/SourceFiles/info/profile/info_profile_top_bar.cpp index 7e7df88508..293c1f38f1 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_top_bar.cpp +++ b/Telegram/SourceFiles/info/profile/info_profile_top_bar.cpp @@ -356,7 +356,8 @@ TopBar::TopBar( } }); return owned; -}()) { +}()) +, _backToggles(std::move(descriptor.backToggles)) { _peer->updateFull(); if (const auto broadcast = _peer->monoforumBroadcast()) { broadcast->updateFull(); @@ -420,16 +421,13 @@ TopBar::TopBar( badgeUpdates = rpl::merge( std::move(badgeUpdates), nameValue() | rpl::to_empty, - rpl::duplicate(descriptor.backToggles) | rpl::to_empty); + _backToggles.value() | rpl::to_empty); std::move(badgeUpdates) | rpl::start_with_next([=] { updateLabelsPosition(); }, _title->lifetime()); setupUniqueBadgeTooltip(); - setupButtons( - controller, - rpl::duplicate(descriptor.backToggles), - descriptor.source); + setupButtons(controller, descriptor.source); setupUserpicButton(controller); if (_hasActions) { _peer->session().changes().peerFlagsValue( @@ -1822,7 +1820,6 @@ void TopBar::paintEvent(QPaintEvent *e) { void TopBar::setupButtons( not_null controller, - rpl::producer backToggles, Source source) { if (source == Source::Preview) { setRoundEdges(false); @@ -1831,7 +1828,7 @@ void TopBar::setupButtons( rpl::combine( _wrap.value(), _edgeColor.value() - ) | rpl::start_with_next([=, backToggles = std::move(backToggles)]( + ) | rpl::start_with_next([=]( Wrap wrap, std::optional edgeColor) mutable { const auto isLayer = (wrap == Wrap::Layer); @@ -1858,7 +1855,7 @@ void TopBar::setupButtons( _back->QWidget::show(); _back->setDuration(0); _back->toggleOn(isLayer || isSide - ? rpl::duplicate(backToggles) + ? _backToggles.value() : rpl::single(wrap == Wrap::Narrow)); _back->entity()->clicks() | rpl::to_empty | rpl::start_to_stream( _backClicks, diff --git a/Telegram/SourceFiles/info/profile/info_profile_top_bar.h b/Telegram/SourceFiles/info/profile/info_profile_top_bar.h index 1714710c75..69e9b6bb9a 100644 --- a/Telegram/SourceFiles/info/profile/info_profile_top_bar.h +++ b/Telegram/SourceFiles/info/profile/info_profile_top_bar.h @@ -154,7 +154,6 @@ private: void setupActions(not_null controller); void setupButtons( not_null controller, - rpl::producer backToggles, Source source); void setupShowLastSeen(not_null controller); void setupUniqueBadgeTooltip(); @@ -257,6 +256,7 @@ private: base::unique_qptr _close; base::unique_qptr> _back; + rpl::variable _backToggles; rpl::event_stream<> _backClicks;