From 972b421fc603355f4c420fec94315771e0a42fde Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 6 Mar 2022 09:04:04 +0300 Subject: [PATCH] Delegated display of ShareInviteLinkBox to caller. --- .../boxes/peers/edit_peer_invite_link.cpp | 49 ++++++++++++------- .../boxes/peers/edit_peer_invite_link.h | 4 +- .../boxes/peers/edit_peer_invite_links.cpp | 4 +- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index c3fad93ae..2fd05e55a 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -345,7 +345,9 @@ void Controller::addHeaderBlock(not_null container) { CopyInviteLink(delegate()->peerListToastParent(), link); }); const auto shareLink = crl::guard(weak, [=] { - ShareInviteLinkBox(_peer, link); + delegate()->peerListShowBox( + ShareInviteLinkBox(_peer, link), + Ui::LayerOption::KeepOther); }); const auto getLinkQr = crl::guard(weak, [=] { delegate()->peerListShowBox( @@ -954,7 +956,9 @@ void AddPermanentLinkBlock( }); const auto shareLink = crl::guard(weak, [=] { if (const auto current = value->current(); !current.link.isEmpty()) { - ShareInviteLinkBox(peer, current.link); + show->showBox( + ShareInviteLinkBox(peer, current.link), + Ui::LayerOption::KeepOther); } }); const auto getLinkQr = crl::guard(weak, [=] { @@ -1116,13 +1120,21 @@ void CopyInviteLink(not_null toastParent, const QString &link) { Ui::Toast::Show(toastParent, tr::lng_group_invite_copied(tr::now)); } -void ShareInviteLinkBox(not_null peer, const QString &link) { +object_ptr ShareInviteLinkBox( + not_null peer, + const QString &link) { const auto sending = std::make_shared(); const auto box = std::make_shared>(); + const auto showToast = [=](const QString &text) { + if (*box) { + Ui::Toast::Show(Ui::BoxShow(*box).toastParent(), text); + } + }; + auto copyCallback = [=] { QGuiApplication::clipboard()->setText(link); - Ui::Toast::Show(tr::lng_group_invite_copied(tr::now)); + showToast(tr::lng_group_invite_copied(tr::now)); }; auto submitCallback = [=]( std::vector> &&result, @@ -1153,9 +1165,11 @@ void ShareInviteLinkBox(not_null peer, const QString &link) { ).append("\n\n"); } text.append(error.first); - Ui::show( - Ui::MakeInformBox(text), - Ui::LayerOption::KeepOther); + if (*box) { + Ui::BoxShow(*box).showBox( + Ui::MakeInformBox(text), + Ui::LayerOption::KeepOther); + } return; } @@ -1173,24 +1187,25 @@ void ShareInviteLinkBox(not_null peer, const QString &link) { auto &api = peer->session().api(); for (const auto peer : result) { const auto history = owner->history(peer); - auto message = Api::MessageToSend(Api::SendAction(history, options)); + auto message = Api::MessageToSend( + Api::SendAction(history, options)); message.textWithTags = comment; message.action.clearDraft = false; api.sendMessage(std::move(message)); } - Ui::Toast::Show(tr::lng_share_done(tr::now)); if (*box) { + showToast(tr::lng_share_done(tr::now)); (*box)->closeBox(); } }; - *box = Ui::show( - Box(ShareBox::Descriptor{ - .session = &peer->session(), - .copyCallback = std::move(copyCallback), - .submitCallback = std::move(submitCallback), - .filterCallback = [](auto peer) { return peer->canWrite(); }, - .navigation = App::wnd()->sessionController() }), - Ui::LayerOption::KeepOther); + auto object = Box(ShareBox::Descriptor{ + .session = &peer->session(), + .copyCallback = std::move(copyCallback), + .submitCallback = std::move(submitCallback), + .filterCallback = [](auto peer) { return peer->canWrite(); }, + .navigation = App::wnd()->sessionController() }); + *box = Ui::MakeWeak(object.data()); + return object; } object_ptr InviteLinkQrBox(const QString &link) { diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h index 4c3fa3d28..0c190da4c 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h @@ -35,7 +35,9 @@ void AddPermanentLinkBlock( rpl::producer fromList); void CopyInviteLink(not_null toastParent, const QString &link); -void ShareInviteLinkBox(not_null peer, const QString &link); +[[nodiscard]] object_ptr ShareInviteLinkBox( + not_null peer, + const QString &link); [[nodiscard]] object_ptr InviteLinkQrBox(const QString &link); [[nodiscard]] object_ptr RevokeLinkBox( not_null peer, diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index c9346d5e8..02f64da22 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -588,7 +588,9 @@ base::unique_qptr LinksController::createRowContextMenu( CopyInviteLink(delegate()->peerListToastParent(), link); }, &st::menuIconCopy); result->addAction(tr::lng_group_invite_context_share(tr::now), [=] { - ShareInviteLinkBox(_peer, link); + delegate()->peerListShowBox( + ShareInviteLinkBox(_peer, link), + Ui::LayerOption::KeepOther); }, &st::menuIconShare); result->addAction(tr::lng_group_invite_context_qr(tr::now), [=] { delegate()->peerListShowBox(