From 55864edb673b4ba316a13b056c7e2abef6798f38 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 4 Apr 2022 17:15:45 +0300 Subject: [PATCH] Refactored adding of sensitive menu items. --- .../SourceFiles/menu/add_action_callback.h | 1 + .../menu/add_action_callback_factory.cpp | 12 +++++++ Telegram/SourceFiles/menu/menu_ttl.cpp | 11 ++++--- .../SourceFiles/settings/settings_common.cpp | 13 ++++---- .../SourceFiles/settings/settings_common.h | 8 ++--- .../settings/settings_information.cpp | 12 +++++-- Telegram/SourceFiles/ui/menu_icons.style | 4 +++ .../SourceFiles/window/window_peer_menu.cpp | 33 ++++++++++--------- Telegram/lib_ui | 2 +- 9 files changed, 60 insertions(+), 36 deletions(-) diff --git a/Telegram/SourceFiles/menu/add_action_callback.h b/Telegram/SourceFiles/menu/add_action_callback.h index 4e9dd190af..1185c001ba 100644 --- a/Telegram/SourceFiles/menu/add_action_callback.h +++ b/Telegram/SourceFiles/menu/add_action_callback.h @@ -21,6 +21,7 @@ public: const style::icon *icon; Fn)> fillSubmenu; bool isSeparator = false; + bool isAttention = false; }; using Callback = Fn; diff --git a/Telegram/SourceFiles/menu/add_action_callback_factory.cpp b/Telegram/SourceFiles/menu/add_action_callback_factory.cpp index 2146a225be..abd953a2fe 100644 --- a/Telegram/SourceFiles/menu/add_action_callback_factory.cpp +++ b/Telegram/SourceFiles/menu/add_action_callback_factory.cpp @@ -8,7 +8,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "menu/add_action_callback_factory.h" #include "menu/add_action_callback.h" +#include "ui/widgets/menu/menu_action.h" #include "ui/widgets/popup_menu.h" +#include "styles/style_menu_icons.h" namespace Menu { @@ -26,6 +28,16 @@ MenuCallback CreateAddActionCallback( return action; } else if (a.isSeparator) { return menu->addSeparator(); + } else if (a.isAttention) { + return menu->addAction(base::make_unique_q( + menu, + st::menuWithIconsAttention, + Ui::Menu::CreateAction( + menu->menu().get(), + a.text, + std::move(a.handler)), + a.icon, + a.icon)); } return menu->addAction(a.text, std::move(a.handler), a.icon); }); diff --git a/Telegram/SourceFiles/menu/menu_ttl.cpp b/Telegram/SourceFiles/menu/menu_ttl.cpp index a8517b0e2c..ab8c5074c5 100644 --- a/Telegram/SourceFiles/menu/menu_ttl.cpp +++ b/Telegram/SourceFiles/menu/menu_ttl.cpp @@ -230,11 +230,12 @@ void FillTTLMenu(not_null menu, Args args) { &st::menuIconCustomize); if (args.startTtl) { - const auto disable = menu->addAction( - tr::lng_manage_messages_ttl_disable(tr::now), - [=] { args.callback(0); }, - &st::menuIconDisableAttention); - disable->setData(st::menuIconAttentionColor->c); + menu->addAction({ + .text = tr::lng_manage_messages_ttl_disable(tr::now), + .handler = [=] { args.callback(0); }, + .icon = &st::menuIconDisableAttention, + .isAttention = true, + }); } menu->addSeparator(); diff --git a/Telegram/SourceFiles/settings/settings_common.cpp b/Telegram/SourceFiles/settings/settings_common.cpp index 8eb34d3b09..701a2e8e4d 100644 --- a/Telegram/SourceFiles/settings/settings_common.cpp +++ b/Telegram/SourceFiles/settings/settings_common.cpp @@ -249,7 +249,7 @@ void FillMenu( not_null controller, Type type, Fn showOther, - MenuCallback addAction) { + Menu::MenuCallback addAction) { const auto window = &controller->window(); if (type == Chat::Id()) { addAction( @@ -269,11 +269,12 @@ void FillMenu( [=] { showOther(Information::Id()); }, &st::menuIconInfo); } - const auto logout = addAction( - tr::lng_settings_logout(tr::now), - [=] { window->showLogoutConfirmation(); }, - &st::menuIconLeaveAttention); - logout->setData(st::menuIconAttentionColor->c); + addAction({ + .text = tr::lng_settings_logout(tr::now), + .handler = [=] { window->showLogoutConfirmation(); }, + .icon = &st::menuIconLeaveAttention, + .isAttention = true, + }); } } diff --git a/Telegram/SourceFiles/settings/settings_common.h b/Telegram/SourceFiles/settings/settings_common.h index b912ed4764..b302580cb9 100644 --- a/Telegram/SourceFiles/settings/settings_common.h +++ b/Telegram/SourceFiles/settings/settings_common.h @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once +#include "menu/add_action_callback.h" #include "ui/rp_widget.h" #include "ui/round_rect.h" #include "base/object_ptr.h" @@ -170,15 +171,10 @@ not_null AddSubsectionTitle( style::margins addPadding = {}, const style::FlatLabel *st = nullptr); -using MenuCallback = Fn handler, - const style::icon *icon)>; - void FillMenu( not_null controller, Type type, Fn showOther, - MenuCallback addAction); + Menu::MenuCallback addAction); } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index 08b22c60c6..0bfa54114b 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -571,7 +571,8 @@ void SetupAccountsWrap( addAction(tr::lng_menu_activate(tr::now), [=] { Core::App().domain().activate(&session->account()); }, &st::menuIconProfile); - const auto logout = addAction(tr::lng_settings_logout(tr::now), [=] { + + auto logoutCallback = [=] { const auto callback = [=](Fn &&close) { close(); Core::App().logoutWithChecks(&session->account()); @@ -584,8 +585,13 @@ void SetupAccountsWrap( .confirmStyle = &st::attentionBoxButton, }), Ui::LayerOption::CloseOther); - }, &st::menuIconLeaveAttention); - logout->setData(st::menuIconAttentionColor->c); + }; + addAction({ + .text = tr::lng_settings_logout(tr::now), + .handler = std::move(logoutCallback), + .icon = &st::menuIconLeaveAttention, + .isAttention = true, + }); state->menu->popup(QCursor::pos()); }, raw->lifetime()); diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index bf493d7e4e..261042d5c3 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -19,6 +19,10 @@ menuWithIcons: Menu(defaultMenu) { arrow: menuIconSubmenuArrow; } +menuWithIconsAttention: Menu(menuWithIcons) { + itemFg: attentionButtonFg; + itemFgOver: attentionButtonFgOver; +} popupMenuWithIcons: PopupMenu(defaultPopupMenu) { scrollPadding: margins(0px, 5px, 0px, 5px); menu: menuWithIcons; diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp index 76685b3137..224faddad9 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.cpp +++ b/Telegram/SourceFiles/window/window_peer_menu.cpp @@ -510,13 +510,14 @@ void Filler::addDeleteChat() { if (_peer->isChannel()) { return; } - const auto action = _addAction( - (_peer->isUser() + _addAction({ + .text = (_peer->isUser() ? tr::lng_profile_delete_conversation(tr::now) : tr::lng_profile_clear_and_exit(tr::now)), - DeleteAndLeaveHandler(_controller, _peer), - &st::menuIconDeleteAttention); - action->setData(st::menuIconAttentionColor->c); + .handler = DeleteAndLeaveHandler(_controller, _peer), + .icon = &st::menuIconDeleteAttention, + .isAttention = true, + }); } void Filler::addLeaveChat() { @@ -524,13 +525,14 @@ void Filler::addLeaveChat() { if (!channel || !channel->amIn()) { return; } - const auto leave = _addAction( - (_peer->isMegagroup() + _addAction({ + .text = (_peer->isMegagroup() ? tr::lng_profile_leave_group(tr::now) : tr::lng_profile_leave_channel(tr::now)), - DeleteAndLeaveHandler(_controller, _peer), - &st::menuIconLeaveAttention); - leave->setData(st::menuIconAttentionColor->c); + .handler = DeleteAndLeaveHandler(_controller, _peer), + .icon = &st::menuIconLeaveAttention, + .isAttention = true, + }); } void Filler::addBlockUser() { @@ -706,11 +708,12 @@ void Filler::addDeleteContact() { return; } const auto controller = _controller; - const auto action = _addAction( - tr::lng_info_delete_contact(tr::now), - [=] { PeerMenuDeleteContact(controller, user); }, - &st::menuIconDeleteAttention); - action->setData(st::menuIconAttentionColor->c); + _addAction({ + .text = tr::lng_info_delete_contact(tr::now), + .handler = [=] { PeerMenuDeleteContact(controller, user); }, + .icon = &st::menuIconDeleteAttention, + .isAttention = true, + }); } void Filler::addManageChat() { diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 8d181e53c5..1c14306aba 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 8d181e53c573639d8a4a7e66e89bc01791b0572b +Subproject commit 1c14306abab06a8c66ce25ac1fbe783f745eff39