From e51b2c0c9115ea1ea2574004c8c07c6dc155374d Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 14 Aug 2024 14:26:44 +0300 Subject: [PATCH] Improved Menu::ShowSponsored to be more generic. --- Telegram/SourceFiles/menu/menu_sponsored.cpp | 39 +++++++++++++++----- Telegram/SourceFiles/menu/menu_sponsored.h | 9 +++++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/menu/menu_sponsored.cpp b/Telegram/SourceFiles/menu/menu_sponsored.cpp index 495da6a85..ba2763d47 100644 --- a/Telegram/SourceFiles/menu/menu_sponsored.cpp +++ b/Telegram/SourceFiles/menu/menu_sponsored.cpp @@ -23,8 +23,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/toast/toast.h" #include "ui/vertical_list.h" #include "ui/widgets/buttons.h" -#include "ui/widgets/popup_menu.h" #include "ui/widgets/label_with_custom_emoji.h" +#include "ui/widgets/menu/menu_add_action_callback.h" +#include "ui/widgets/menu/menu_add_action_callback_factory.h" +#include "ui/widgets/popup_menu.h" #include "styles/style_channel_earn.h" #include "styles/style_chat.h" #include "styles/style_layers.h" @@ -333,29 +335,29 @@ void ShowReportSponsoredBox( } // namespace -void ShowSponsored( +void FillSponsored( not_null parent, + const Ui::Menu::MenuCallback &addAction, std::shared_ptr show, not_null item) { Expects(item->isSponsored()); const auto session = &item->history()->session(); - const auto menu = Ui::CreateChild( - parent.get(), - st::popupMenuWithIcons); - - menu->addAction(tr::lng_sponsored_menu_revenued_about(tr::now), [=] { + addAction(tr::lng_sponsored_menu_revenued_about(tr::now), [=] { show->show(Box(AboutBox, show)); }, &st::menuIconInfo); - menu->addAction(tr::lng_sponsored_menu_revenued_report(tr::now), [=] { + addAction(tr::lng_sponsored_menu_revenued_report(tr::now), [=] { ShowReportSponsoredBox(show, item); }, &st::menuIconBlock); - menu->addSeparator(&st::expandedMenuSeparator); + addAction({ + .separatorSt = &st::expandedMenuSeparator, + .isSeparator = true, + }); - menu->addAction(tr::lng_sponsored_hide_ads(tr::now), [=] { + addAction(tr::lng_sponsored_hide_ads(tr::now), [=] { if (session->premium()) { using Result = Data::SponsoredReportResult; session->sponsoredMessages().createReportCallback( @@ -364,6 +366,23 @@ void ShowSponsored( ShowPremiumPreviewBox(show, PremiumFeature::NoAds); } }, &st::menuIconCancel); +} + +void ShowSponsored( + not_null parent, + std::shared_ptr show, + not_null item) { + Expects(item->isSponsored()); + + const auto menu = Ui::CreateChild( + parent.get(), + st::popupMenuWithIcons); + + FillSponsored( + parent, + Ui::Menu::CreateAddActionCallback(menu), + show, + item); menu->popup(QCursor::pos()); } diff --git a/Telegram/SourceFiles/menu/menu_sponsored.h b/Telegram/SourceFiles/menu/menu_sponsored.h index ddd011ad6..1ceda20ca 100644 --- a/Telegram/SourceFiles/menu/menu_sponsored.h +++ b/Telegram/SourceFiles/menu/menu_sponsored.h @@ -13,12 +13,21 @@ class Show; namespace Ui { class RpWidget; +namespace Menu { +class MenuCallback; +} // namespace Menu } // namespace Ui class HistoryItem; namespace Menu { +void FillSponsored( + not_null parent, + const Ui::Menu::MenuCallback &addAction, + std::shared_ptr show, + not_null item); + void ShowSponsored( not_null parent, std::shared_ptr show,