From 9dccc12734144582eae8858e9bf697da8850bed7 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 6 Mar 2022 08:34:07 +0300 Subject: [PATCH] Delegated display of EditLinkBox to caller. --- .../boxes/peers/edit_peer_invite_link.cpp | 42 +++++++++++-------- .../boxes/peers/edit_peer_invite_link.h | 2 +- .../boxes/peers/edit_peer_invite_links.cpp | 12 ++++-- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index 949c561056..c5e15a82e1 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -354,7 +354,9 @@ void Controller::addHeaderBlock(not_null container) { RevokeLink(_peer, admin, link); }); const auto editLink = crl::guard(weak, [=] { - EditLink(_peer, _data.current()); + delegate()->peerListShowBox( + EditLinkBox(_peer, _data.current()), + Ui::LayerOption::KeepOther); }); const auto deleteLink = crl::guard(weak, [=] { delegate()->peerListShowBox( @@ -1203,7 +1205,7 @@ void InviteLinkQrBox(const QString &link) { })); } -void EditLink( +object_ptr EditLinkBox( not_null peer, const Api::InviteLink &data) { const auto creating = data.link.isEmpty(); @@ -1242,22 +1244,26 @@ void EditLink( }; const auto isGroup = !peer->isBroadcast(); const auto isPublic = peer->isChannel() && peer->asChannel()->isPublic(); - *box = Ui::show( - (creating - ? Box(Ui::CreateInviteLinkBox, isGroup, isPublic, done) - : Box( - Ui::EditInviteLinkBox, - Fields{ - .link = data.link, - .label = data.label, - .expireDate = data.expireDate, - .usageLimit = data.usageLimit, - .requestApproval = data.requestApproval, - .isGroup = isGroup, - .isPublic = isPublic, - }, - done)), - Ui::LayerOption::KeepOther); + if (creating) { + auto object = Box(Ui::CreateInviteLinkBox, isGroup, isPublic, done); + *box = Ui::MakeWeak(object.data()); + return object; + } else { + auto object = Box( + Ui::EditInviteLinkBox, + Fields{ + .link = data.link, + .label = data.label, + .expireDate = data.expireDate, + .usageLimit = data.usageLimit, + .requestApproval = data.requestApproval, + .isGroup = isGroup, + .isPublic = isPublic, + }, + done); + *box = Ui::MakeWeak(object.data()); + return object; + } } void RevokeLink( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h index 4dd5b9e384..464c08990d 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h @@ -41,7 +41,7 @@ void RevokeLink( not_null peer, not_null admin, const QString &link); -void EditLink( +[[nodiscard]] object_ptr EditLinkBox( not_null peer, const Api::InviteLink &data); [[nodiscard]] object_ptr DeleteLinkBox( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index 99a003b298..edbf03e645 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -594,7 +594,9 @@ base::unique_qptr LinksController::createRowContextMenu( InviteLinkQrBox(link); }, &st::menuIconQrCode); result->addAction(tr::lng_group_invite_context_edit(tr::now), [=] { - EditLink(_peer, data); + delegate()->peerListShowBox( + EditLinkBox(_peer, data), + Ui::LayerOption::KeepOther); }, &st::menuIconEdit); result->addAction(tr::lng_group_invite_context_revoke(tr::now), [=] { RevokeLink(_peer, _admin, link); @@ -881,6 +883,8 @@ void ManageInviteLinksBox( int revokedCount) { using namespace Settings; + const auto show = std::make_shared(box); + box->setTitle(tr::lng_group_invite_title()); box->setWidth(st::boxWideWidth); @@ -903,7 +907,7 @@ void ManageInviteLinksBox( AddSubsectionTitle(container, tr::lng_create_permanent_link_title()); AddPermanentLinkBlock( - std::make_shared(box), + show, container, peer, admin, @@ -914,7 +918,9 @@ void ManageInviteLinksBox( if (admin->isSelf()) { const auto add = AddCreateLinkButton(container); add->setClickedCallback([=] { - EditLink(peer, InviteLinkData{ .admin = admin }); + show->showBox( + EditLinkBox(peer, InviteLinkData{ .admin = admin }), + Ui::LayerOption::KeepOther); }); } else { otherHeader = container->add(object_ptr>(