diff --git a/Telegram/SourceFiles/ayu/ayu_url_handlers.cpp b/Telegram/SourceFiles/ayu/ayu_url_handlers.cpp index 3ca2c5684..ea1eed994 100644 --- a/Telegram/SourceFiles/ayu/ayu_url_handlers.cpp +++ b/Telegram/SourceFiles/ayu/ayu_url_handlers.cpp @@ -43,18 +43,20 @@ bool ResolveUser( return true; } - searchById(userId, - &controller->session(), - [=](const QString &title, UserData *data) - { - if (data) { - controller->showPeerInfo(data); - return; - } + searchById( + userId, + &controller->session(), + [=](const QString &title, UserData *data) + { + if (data) { + controller->showPeerInfo(data); + return; + } - Core::App().hideMediaView(); - Ui::show(Ui::MakeInformBox(tr::ayu_UserNotFoundMessage())); - }); + Core::App().hideMediaView(); + Ui::show(Ui::MakeInformBox(tr::ayu_UserNotFoundMessage())); + } + ); return true; } diff --git a/Telegram/SourceFiles/ayu/ui/context_menu/menu_item_subtext.cpp b/Telegram/SourceFiles/ayu/ui/context_menu/menu_item_subtext.cpp index 7f7bdadf4..3eed133dc 100644 --- a/Telegram/SourceFiles/ayu/ui/context_menu/menu_item_subtext.cpp +++ b/Telegram/SourceFiles/ayu/ui/context_menu/menu_item_subtext.cpp @@ -218,59 +218,73 @@ ActionStickerPackAuthor::ActionStickerPackAuthor(not_null menu, } void ActionStickerPackAuthor::searchAuthor(ID authorId) { - const auto pointer = Ui::MakeWeak(this); - searchById(authorId, - _session, - [=](const QString &username, UserData *user) - { - if (!pointer) { - LOG(("ContextActionStickerAuthor: searchById callback after destruction")); - return; - } - if (username.isEmpty() && !user) { - _subText = QString(tr::ayu_MessageDetailsPackOwnerNotFoundPC(tr::now)); - setClickedCallback( - [=] - { - QGuiApplication::clipboard()->setText(QString::number(authorId)); - if (const auto window = _session->tryResolveWindow()) { - if (const auto mainWidget = window->widget()->sessionController()) { - mainWidget->showToast(tr::ayu_IDCopiedToast(tr::now)); - } - } - }); + const auto session = _session; + const auto weak = Ui::MakeWeak(this); - crl::on_main( - [=] - { - update(); - }); - return; - } + searchById( + authorId, + session, + [session, weak, authorId](const QString &username, UserData *user) + { + if (!weak) { + LOG(("ContextActionStickerAuthor: searchById callback after destruction")); + return; + } - const auto title = username.isEmpty() ? user ? user->name() : QString() : username; - const auto callback = [=] - { - if (user) { - if (const auto window = _session->tryResolveWindow()) { - if (const auto mainWidget = window->widget()->sessionController()) { - mainWidget->showPeer(user); - } - } - } else { - QGuiApplication::clipboard()->setText(title); - } - }; + const auto strong = weak.data(); + if (!strong) { + LOG(("ContextActionStickerAuthor: weak.data() returned null")); + return; + } - setClickedCallback(callback); + if (username.isEmpty() && !user) { + strong->_subText = QString(tr::ayu_MessageDetailsPackOwnerNotFoundPC(tr::now)); + strong->setClickedCallback( + [authorId, session] + { + QGuiApplication::clipboard()->setText(QString::number(authorId)); + if (const auto window = session->tryResolveWindow()) { + if (const auto mainWidget = window->widget()->sessionController()) { + mainWidget->showToast(tr::ayu_IDCopiedToast(tr::now)); + } + } + }); - _subText = QString(title); - crl::on_main( - [=] - { - update(); - }); - }); + crl::on_main( + [weak] + { + if (const auto strongInner = weak.data()) { + strongInner->update(); + } + }); + return; + } + + const auto title = username.isEmpty() ? (user ? user->name() : QString()) : username; + const auto callback = [user, title, session] + { + if (user) { + if (const auto window = session->tryResolveWindow()) { + if (const auto mainWidget = window->widget()->sessionController()) { + mainWidget->showPeer(user); + } + } + } else { + QGuiApplication::clipboard()->setText(title); + } + }; + + strong->setClickedCallback(callback); + strong->_subText = QString(title); + crl::on_main( + [weak] + { + if (const auto strongInner = weak.data()) { + strongInner->update(); + } + }); + } + ); } } // namespace diff --git a/Telegram/SourceFiles/boxes/sticker_set_box.cpp b/Telegram/SourceFiles/boxes/sticker_set_box.cpp index 9ab4bfd59..3f3d96598 100644 --- a/Telegram/SourceFiles/boxes/sticker_set_box.cpp +++ b/Telegram/SourceFiles/boxes/sticker_set_box.cpp @@ -771,30 +771,43 @@ void StickerSetBox::updateButtons() { const auto addPackOwner = [=](const std::shared_ptr> &menu) { if (type == Data::StickersType::Stickers || type == Data::StickersType::Emoji) { - const auto pointer = Ui::MakeWeak(this); + const auto weak = Ui::MakeWeak(this); + const auto session = _session; + const auto innerId = _inner->setId() >> 32; + (*menu)->addAction( tr::ayu_MessageDetailsPackOwnerPC(tr::now), - [=] + [weak, session, innerId] { - if (!pointer) { + if (!weak) { + return; + } + + const auto strong = weak.data(); + if (!strong) { return; } searchById( - _inner->setId() >> 32, - _session, - [=](const QString &username, UserData *user) + innerId, + session, + [session, weak](const QString &username, UserData *user) { - if (!pointer) { + if (!weak) { + return; + } + + const auto strongInner = weak.data(); + if (!strongInner) { return; } if (!user) { - showToast(tr::ayu_UserNotFoundMessage(tr::now)); + strongInner->showToast(tr::ayu_UserNotFoundMessage(tr::now)); return; } - if (const auto window = _session->tryResolveWindow()) { + if (const auto window = session->tryResolveWindow()) { if (const auto mainWidget = window->widget()->sessionController()) { mainWidget->showPeer(user); } diff --git a/Telegram/SourceFiles/core/phone_click_handler.cpp b/Telegram/SourceFiles/core/phone_click_handler.cpp index a73ab7990..3fbfe9b91 100644 --- a/Telegram/SourceFiles/core/phone_click_handler.cpp +++ b/Telegram/SourceFiles/core/phone_click_handler.cpp @@ -127,16 +127,30 @@ ResolvePhoneAction::ResolvePhoneAction( return; } - searchById(possibleId, - &controller->session(), - [=](const QString &username, UserData *user) - { - if (user) { - _peer = user; - } + const auto weak = Ui::MakeWeak(this); + const auto session = &controller->session(); - _loaded.force_assign(true); - }); + searchById( + possibleId, + session, + [session, weak, possibleId](const QString &username, UserData *user) + { + if (!weak) { + return; + } + + const auto strong = weak.data(); + if (!strong) { + return; + } + + if (user) { + strong->_peer = user; + } + + strong->_loaded.force_assign(true); + } + ); } }).send(); }