Replaced Window::PeerMenuCallback with struct.

This commit is contained in:
23rd 2022-03-28 15:30:40 +03:00 committed by John Preston
parent d8ee50c6fe
commit c520cb777c
7 changed files with 56 additions and 46 deletions

View File

@ -1771,6 +1771,10 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) {
fillArchiveSearchMenu(_menu.get()); fillArchiveSearchMenu(_menu.get());
} }
} else { } else {
const auto addAction = Window::PeerMenuCallback([&](
Window::PeerMenuCallback::Args &&a) {
return _menu->addAction(a.text, std::move(a.handler), a.icon);
});
Window::FillDialogsEntryMenu( Window::FillDialogsEntryMenu(
_controller, _controller,
Dialogs::EntryState{ Dialogs::EntryState{
@ -1778,12 +1782,7 @@ void InnerWidget::contextMenuEvent(QContextMenuEvent *e) {
.section = Dialogs::EntryState::Section::ChatsList, .section = Dialogs::EntryState::Section::ChatsList,
.filterId = _filterId, .filterId = _filterId,
}, },
[&]( addAction);
const QString &text,
Fn<void()> callback,
const style::icon *icon) {
return _menu->addAction(text, std::move(callback), icon);
});
} }
QObject::connect(_menu.get(), &QObject::destroyed, [=] { QObject::connect(_menu.get(), &QObject::destroyed, [=] {
if (_menuRow.key) { if (_menuRow.key) {

View File

@ -315,12 +315,10 @@ void TopBarWidget::showPeerMenu() {
if (!created) { if (!created) {
return; return;
} }
const auto addAction = [&]( const auto addAction = Window::PeerMenuCallback([&](
const QString &text, Window::PeerMenuCallback::Args a) {
Fn<void()> callback, return _menu->addAction(a.text, std::move(a.handler), a.icon);
const style::icon *icon) { });
return _menu->addAction(text, std::move(callback), icon);
};
Window::FillDialogsEntryMenu(_controller, _activeChat, addAction); Window::FillDialogsEntryMenu(_controller, _activeChat, addAction);
if (_menu->empty()) { if (_menu->empty()) {
_menu.destroy(); _menu.destroy();

View File

@ -515,12 +515,10 @@ void WrapWidget::showTopBarMenu() {
}); });
_topBarMenuToggle->installEventFilter(_topBarMenu.get()); _topBarMenuToggle->installEventFilter(_topBarMenu.get());
const auto addAction = [=]( const auto addAction = Window::PeerMenuCallback([=](
const QString &text, Window::PeerMenuCallback::Args a) {
Fn<void()> callback, return _topBarMenu->addAction(a.text, std::move(a.handler), a.icon);
const style::icon *icon) { });
return _topBarMenu->addAction(text, std::move(callback), icon);
};
if (key().isDownloads()) { if (key().isDownloads()) {
addAction( addAction(
tr::lng_context_delete_all_files(tr::now), tr::lng_context_delete_all_files(tr::now),

View File

@ -546,15 +546,13 @@ void SetupAccountsWrap(
} else if (which != Qt::RightButton) { } else if (which != Qt::RightButton) {
return; return;
} }
const auto addAction = [&]( const auto addAction = Window::PeerMenuCallback([&](
const QString &text, Window::PeerMenuCallback::Args args) {
Fn<void()> callback,
const style::icon *icon) {
return state->menu->addAction( return state->menu->addAction(
text, args.text,
crl::guard(raw, std::move(callback)), crl::guard(raw, std::move(args.handler)),
icon); args.icon);
}; });
if (!state->menu && IsAltShift(raw->clickModifiers())) { if (!state->menu && IsAltShift(raw->clickModifiers())) {
state->menu = base::make_unique_q<Ui::PopupMenu>( state->menu = base::make_unique_q<Ui::PopupMenu>(
raw, raw,

View File

@ -310,15 +310,13 @@ void FiltersMenu::showMenu(QPoint position, FilterId id) {
_popupMenu = base::make_unique_q<Ui::PopupMenu>( _popupMenu = base::make_unique_q<Ui::PopupMenu>(
i->second.get(), i->second.get(),
st::popupMenuWithIcons); st::popupMenuWithIcons);
const auto addAction = [&]( const auto addAction = Window::PeerMenuCallback([&](
const QString &text, Window::PeerMenuCallback::Args args) {
Fn<void()> callback,
const style::icon *icon) {
return _popupMenu->addAction( return _popupMenu->addAction(
text, args.text,
crl::guard(&_outer, std::move(callback)), crl::guard(&_outer, std::move(args.handler)),
icon); args.icon);
}; });
addAction( addAction(
tr::lng_filters_context_edit(tr::now), tr::lng_filters_context_edit(tr::now),

View File

@ -475,15 +475,13 @@ void MainMenu::setupArchive() {
_contextMenu = base::make_unique_q<Ui::PopupMenu>( _contextMenu = base::make_unique_q<Ui::PopupMenu>(
this, this,
st::popupMenuWithIcons); st::popupMenuWithIcons);
const auto addAction = [&]( const auto addAction = PeerMenuCallback([&](
const QString &text, PeerMenuCallback::Args a) {
Fn<void()> callback,
const style::icon *icon) {
return _contextMenu->addAction( return _contextMenu->addAction(
text, a.text,
std::move(callback), std::move(a.handler),
icon); a.icon);
}; });
const auto hide = [=] { const auto hide = [=] {
controller->session().settings().setArchiveInMainMenu(false); controller->session().settings().setArchiveInMainMenu(false);

View File

@ -38,10 +38,31 @@ class SessionNavigation;
extern const char kOptionViewProfileInChatsListContextMenu[]; extern const char kOptionViewProfileInChatsListContextMenu[];
using PeerMenuCallback = Fn<QAction*( struct PeerMenuCallback {
public:
struct Args {
const QString &text;
Fn<void()> handler;
const style::icon *icon;
};
using Callback = Fn<QAction*(Args&&)>;
explicit PeerMenuCallback(Callback callback)
: callback(std::move(callback)) {
}
QAction *operator()(Args &&args) const {
return callback(std::move(args));
}
QAction *operator()(
const QString &text, const QString &text,
Fn<void()> handler, Fn<void()> handler,
const style::icon *icon)>; const style::icon *icon) const {
return callback({ text, std::move(handler), icon });
}
private:
Callback callback;
};
void FillDialogsEntryMenu( void FillDialogsEntryMenu(
not_null<SessionController*> controller, not_null<SessionController*> controller,