From c520cb777c8b4da7a82fe072463c78f002e25b7b Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 28 Mar 2022 15:30:40 +0300 Subject: [PATCH] Replaced Window::PeerMenuCallback with struct. --- .../dialogs/dialogs_inner_widget.cpp | 11 ++++--- .../view/history_view_top_bar_widget.cpp | 10 +++---- .../SourceFiles/info/info_wrap_widget.cpp | 10 +++---- .../settings/settings_information.cpp | 14 ++++----- .../window/window_filters_menu.cpp | 14 ++++----- .../SourceFiles/window/window_main_menu.cpp | 14 ++++----- .../SourceFiles/window/window_peer_menu.h | 29 ++++++++++++++++--- 7 files changed, 56 insertions(+), 46 deletions(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 8091b9e23c..0f744d8ebc 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -1771,6 +1771,10 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) { fillArchiveSearchMenu(_menu.get()); } } else { + const auto addAction = Window::PeerMenuCallback([&]( + Window::PeerMenuCallback::Args &&a) { + return _menu->addAction(a.text, std::move(a.handler), a.icon); + }); Window::FillDialogsEntryMenu( _controller, Dialogs::EntryState{ @@ -1778,12 +1782,7 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) { .section = Dialogs::EntryState::Section::ChatsList, .filterId = _filterId, }, - [&]( - const QString &text, - Fn callback, - const style::icon *icon) { - return _menu->addAction(text, std::move(callback), icon); - }); + addAction); } QObject::connect(_menu.get(), &QObject::destroyed, [=] { if (_menuRow.key) { diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp index ab450ba7c9..c777ce5bee 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp @@ -315,12 +315,10 @@ void TopBarWidget::showPeerMenu() { if (!created) { return; } - const auto addAction = [&]( - const QString &text, - Fn callback, - const style::icon *icon) { - return _menu->addAction(text, std::move(callback), icon); - }; + const auto addAction = Window::PeerMenuCallback([&]( + Window::PeerMenuCallback::Args a) { + return _menu->addAction(a.text, std::move(a.handler), a.icon); + }); Window::FillDialogsEntryMenu(_controller, _activeChat, addAction); if (_menu->empty()) { _menu.destroy(); diff --git a/Telegram/SourceFiles/info/info_wrap_widget.cpp b/Telegram/SourceFiles/info/info_wrap_widget.cpp index e3c07c3b71..e76674420e 100644 --- a/Telegram/SourceFiles/info/info_wrap_widget.cpp +++ b/Telegram/SourceFiles/info/info_wrap_widget.cpp @@ -515,12 +515,10 @@ void WrapWidget::showTopBarMenu() { }); _topBarMenuToggle->installEventFilter(_topBarMenu.get()); - const auto addAction = [=]( - const QString &text, - Fn callback, - const style::icon *icon) { - return _topBarMenu->addAction(text, std::move(callback), icon); - }; + const auto addAction = Window::PeerMenuCallback([=]( + Window::PeerMenuCallback::Args a) { + return _topBarMenu->addAction(a.text, std::move(a.handler), a.icon); + }); if (key().isDownloads()) { addAction( tr::lng_context_delete_all_files(tr::now), diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index e406d1da6f..443ae1e782 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -546,15 +546,13 @@ void SetupAccountsWrap( } else if (which != Qt::RightButton) { return; } - const auto addAction = [&]( - const QString &text, - Fn callback, - const style::icon *icon) { + const auto addAction = Window::PeerMenuCallback([&]( + Window::PeerMenuCallback::Args args) { return state->menu->addAction( - text, - crl::guard(raw, std::move(callback)), - icon); - }; + args.text, + crl::guard(raw, std::move(args.handler)), + args.icon); + }); if (!state->menu && IsAltShift(raw->clickModifiers())) { state->menu = base::make_unique_q( raw, diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index 853cccad4f..3ffec6c4a3 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -310,15 +310,13 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) { _popupMenu = base::make_unique_q( i->second.get(), st::popupMenuWithIcons); - const auto addAction = [&]( - const QString &text, - Fn callback, - const style::icon *icon) { + const auto addAction = Window::PeerMenuCallback([&]( + Window::PeerMenuCallback::Args args) { return _popupMenu->addAction( - text, - crl::guard(&_outer, std::move(callback)), - icon); - }; + args.text, + crl::guard(&_outer, std::move(args.handler)), + args.icon); + }); addAction( tr::lng_filters_context_edit(tr::now), diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 4c0b695021..54095f553d 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -475,15 +475,13 @@ void MainMenu::setupArchive() { _contextMenu = base::make_unique_q( this, st::popupMenuWithIcons); - const auto addAction = [&]( - const QString &text, - Fn callback, - const style::icon *icon) { + const auto addAction = PeerMenuCallback([&]( + PeerMenuCallback::Args a) { return _contextMenu->addAction( - text, - std::move(callback), - icon); - }; + a.text, + std::move(a.handler), + a.icon); + }); const auto hide = [=] { controller->session().settings().setArchiveInMainMenu(false); diff --git a/Telegram/SourceFiles/window/window_peer_menu.h b/Telegram/SourceFiles/window/window_peer_menu.h index f715d655d7..ef7f896812 100644 --- a/Telegram/SourceFiles/window/window_peer_menu.h +++ b/Telegram/SourceFiles/window/window_peer_menu.h @@ -38,10 +38,31 @@ class SessionNavigation; extern const char kOptionViewProfileInChatsListContextMenu[]; -using PeerMenuCallback = Fn handler, - const style::icon *icon)>; +struct PeerMenuCallback { +public: + struct Args { + const QString &text; + Fn handler; + const style::icon *icon; + }; + using Callback = Fn; + + explicit PeerMenuCallback(Callback callback) + : callback(std::move(callback)) { + } + + QAction *operator()(Args &&args) const { + return callback(std::move(args)); + } + QAction *operator()( + const QString &text, + Fn handler, + const style::icon *icon) const { + return callback({ text, std::move(handler), icon }); + } +private: + Callback callback; +}; void FillDialogsEntryMenu( not_null controller,