From 71ee2de354e16c1c8c1132febf3e7db6e020f198 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 6 Mar 2022 08:54:48 +0300 Subject: [PATCH] Delegated display of InviteLinkQrBox to caller. --- .../boxes/peers/edit_peer_invite_link.cpp | 34 ++++++++++++------- .../boxes/peers/edit_peer_invite_link.h | 2 +- .../boxes/peers/edit_peer_invite_links.cpp | 4 ++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp index 0666c7053a..99e22a0d75 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.cpp @@ -271,11 +271,15 @@ QImage QrForShare(const QString &text) { void QrBox( not_null box, const QString &link, - Fn share) { + Fn)> share) { box->setTitle(tr::lng_group_invite_qr_title()); box->addButton(tr::lng_about_done(), [=] { box->closeBox(); }); + const auto copyCallback = [=, show = std::make_shared(box)] { + share(QrForShare(link), show); + }; + const auto qr = Qr( link, st::inviteLinkQrPixel, @@ -295,9 +299,7 @@ void QrBox( ) | rpl::start_with_next([=](int width) { button->move((width - size) / 2, st::inviteLinkQrSkip); }, button->lifetime()); - button->setClickedCallback([=] { - share(QrForShare(link)); - }); + button->setClickedCallback(copyCallback); box->addRow( object_ptr( @@ -306,9 +308,7 @@ void QrBox( st::boxLabel), st::inviteLinkQrValuePadding); - box->addLeftButton( - tr::lng_group_invite_context_copy(), - [=] { share(QrForShare(link)); }); + box->addLeftButton(tr::lng_group_invite_context_copy(), copyCallback); } Controller::Controller( @@ -348,7 +348,9 @@ void Controller::addHeaderBlock(not_null container) { ShareInviteLinkBox(_peer, link); }); const auto getLinkQr = crl::guard(weak, [=] { - InviteLinkQrBox(link); + delegate()->peerListShowBox( + InviteLinkQrBox(link), + Ui::LayerOption::KeepOther); }); const auto revokeLink = crl::guard(weak, [=] { delegate()->peerListShowBox( @@ -957,7 +959,9 @@ void AddPermanentLinkBlock( }); const auto getLinkQr = crl::guard(weak, [=] { if (const auto current = value->current(); !current.link.isEmpty()) { - InviteLinkQrBox(current.link); + show->showBox( + InviteLinkQrBox(current.link), + Ui::LayerOption::KeepOther); } }); const auto revokeLink = crl::guard(weak, [=] { @@ -1189,14 +1193,18 @@ void ShareInviteLinkBox(not_null peer, const QString &link) { Ui::LayerOption::KeepOther); } -void InviteLinkQrBox(const QString &link) { - Ui::show(Box(QrBox, link, [=](const QImage &image) { +object_ptr InviteLinkQrBox(const QString &link) { + return Box(QrBox, link, [=]( + const QImage &image, + std::shared_ptr show) { auto mime = std::make_unique(); mime->setImageData(image); QGuiApplication::clipboard()->setMimeData(mime.release()); - Ui::Toast::Show(tr::lng_group_invite_qr_copied(tr::now)); - })); + Ui::Toast::Show( + show->toastParent(), + tr::lng_group_invite_qr_copied(tr::now)); + }); } object_ptr EditLinkBox( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h index fa33a412ec..8f543cca47 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_link.h @@ -36,7 +36,7 @@ void AddPermanentLinkBlock( void CopyInviteLink(const QString &link); void ShareInviteLinkBox(not_null peer, const QString &link); -void InviteLinkQrBox(const QString &link); +[[nodiscard]] object_ptr InviteLinkQrBox(const QString &link); [[nodiscard]] object_ptr RevokeLinkBox( not_null peer, not_null admin, diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp index fd933690ed..02421ed0f8 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_invite_links.cpp @@ -591,7 +591,9 @@ base::unique_qptr LinksController::createRowContextMenu( ShareInviteLinkBox(_peer, link); }, &st::menuIconShare); result->addAction(tr::lng_group_invite_context_qr(tr::now), [=] { - InviteLinkQrBox(link); + delegate()->peerListShowBox( + InviteLinkQrBox(link), + Ui::LayerOption::KeepOther); }, &st::menuIconQrCode); result->addAction(tr::lng_group_invite_context_edit(tr::now), [=] { delegate()->peerListShowBox(