From 65fd47a082075d2eff0f5d132bd3344bedfd5111 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 29 Aug 2025 11:13:14 +0300 Subject: [PATCH] Fixed handle of dialogs resize for unconfirmed authorizations. --- .../dialogs/dialogs_top_bar_suggestion.cpp | 24 +++++++++++-------- .../ui/dialogs_top_bar_suggestion_content.cpp | 22 +++++++++++------ .../ui/dialogs_top_bar_suggestion_content.h | 4 +++- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp b/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp index 5a51750a00..d40de08aa0 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_top_bar_suggestion.cpp @@ -85,7 +85,7 @@ rpl::producer*> TopBarSuggestionValue( struct State { TopBarSuggestionContent *content = nullptr; - Ui::RpWidget *unconfirmedWarning = nullptr; + Ui::SlideWrap *unconfirmedWarning = nullptr; base::unique_qptr> wrap; rpl::variable leftPadding; rpl::variable desiredWrapToggle; @@ -116,9 +116,10 @@ rpl::producer*> TopBarSuggestionValue( }; const auto ensureWrap = [=](not_null child) { if (!state->wrap) { - state->wrap = base::make_unique_q>( - parent, - object_ptr::fromRaw(child)); + state->wrap + = base::make_unique_q>( + parent, + object_ptr::fromRaw(child)); state->desiredWrapToggle.force_assign( Toggle{ false, anim::type::instant }); } @@ -143,17 +144,20 @@ rpl::producer*> TopBarSuggestionValue( if (!session->api().authorizations().unreviewed().empty()) { state->content = nullptr; state->wrap = nullptr; - const auto list = session->api().authorizations().unreviewed(); - const auto hashes = list - | ranges::views::transform([](const auto &auth) { + const auto &list + = session->api().authorizations().unreviewed(); + const auto hashes = ranges::views::all( + list + ) | ranges::views::transform([](const auto &auth) { return auth.hash; - }) - | ranges::to(); + }) | ranges::to_vector; const auto content = CreateUnconfirmedAuthContent( parent, list, [=](bool confirmed) { - session->api().authorizations().review(hashes, confirmed); + session->api().authorizations().review( + hashes, + confirmed); }); ensureWrap(content); const auto wasUnconfirmedWarning = state->unconfirmedWarning; diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.cpp index 6f9291277c..6e53d71a0d 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.cpp @@ -32,11 +32,24 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Dialogs { -not_null CreateUnconfirmedAuthContent( +class UnconfirmedAuthWrap : public Ui::SlideWrap { +public: + UnconfirmedAuthWrap( + not_null parent, + object_ptr &&child) + : Ui::SlideWrap(parent, std::move(child)) { + } + + rpl::producer desiredHeightValue() const override { + return entity()->heightValue(); + } +}; + +not_null*> CreateUnconfirmedAuthContent( not_null parent, const std::vector &list, Fn callback) { - const auto wrap = Ui::CreateChild>( + const auto wrap = Ui::CreateChild( parent, object_ptr(parent)); const auto content = wrap->entity(); @@ -45,11 +58,6 @@ not_null CreateUnconfirmedAuthContent( p.fillRect(content->rect(), st::dialogsBg); }, content->lifetime()); - parent->widthValue( - ) | rpl::start_with_next([=](int width) { - content->resizeToWidth(width); - }, content->lifetime()); - const auto padding = st::dialogsUnconfirmedAuthPadding; Ui::AddSkip(content); diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.h b/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.h index b68682855e..432f29fcc2 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_top_bar_suggestion_content.h @@ -13,6 +13,8 @@ namespace Ui { class DynamicImage; class IconButton; class VerticalLayout; +template +class SlideWrap; } // namespace Ui namespace Ui::Text { @@ -25,7 +27,7 @@ struct UnreviewedAuth; namespace Dialogs { -not_null CreateUnconfirmedAuthContent( +not_null*> CreateUnconfirmedAuthContent( not_null parent, const std::vector &list, Fn callback);