From 4093d6605a901a9ae8bdd8fe877dd9cdb05ac9c6 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 20 Apr 2022 11:35:11 +0400 Subject: [PATCH] Don't attach menu callback to QAction lifetime. --- ui/widgets/menu/menu_common.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ui/widgets/menu/menu_common.cpp b/ui/widgets/menu/menu_common.cpp index badc14c..89376a6 100644 --- a/ui/widgets/menu/menu_common.cpp +++ b/ui/widgets/menu/menu_common.cpp @@ -6,6 +6,9 @@ // #include "ui/widgets/menu/menu_common.h" +#include "ui/ui_utility.h" +#include "base/invoke_queued.h" + #include namespace Ui::Menu { @@ -15,12 +18,11 @@ not_null CreateAction( const QString &text, Fn &&callback) { const auto action = new QAction(text, parent); - parent->connect( - action, - &QAction::triggered, - action, - std::move(callback), - Qt::QueuedConnection); + const auto guard = MakeWeak(parent); + auto triggered = [guard, callback = std::move(callback)]() mutable { + InvokeQueued(guard, std::move(callback)); + }; + parent->connect(action, &QAction::triggered, std::move(triggered)); return action; }