Don't attach menu callback to QAction lifetime.

This commit is contained in:
John Preston 2022-04-20 11:35:11 +04:00
parent 50ef072af7
commit 4093d6605a

View file

@ -6,6 +6,9 @@
// //
#include "ui/widgets/menu/menu_common.h" #include "ui/widgets/menu/menu_common.h"
#include "ui/ui_utility.h"
#include "base/invoke_queued.h"
#include <QAction> #include <QAction>
namespace Ui::Menu { namespace Ui::Menu {
@ -15,12 +18,11 @@ not_null<QAction*> CreateAction(
const QString &text, const QString &text,
Fn<void()> &&callback) { Fn<void()> &&callback) {
const auto action = new QAction(text, parent); const auto action = new QAction(text, parent);
parent->connect( const auto guard = MakeWeak(parent);
action, auto triggered = [guard, callback = std::move(callback)]() mutable {
&QAction::triggered, InvokeQueued(guard, std::move(callback));
action, };
std::move(callback), parent->connect(action, &QAction::triggered, std::move(triggered));
Qt::QueuedConnection);
return action; return action;
} }