diff --git a/src/kmoretools/kmoretoolsmenufactory.h b/src/kmoretools/kmoretoolsmenufactory.h --- a/src/kmoretools/kmoretoolsmenufactory.h +++ b/src/kmoretools/kmoretoolsmenufactory.h @@ -100,6 +100,15 @@ void fillMenuFromGroupingNames(QMenu* menu, const QStringList& groupingNames, const QUrl& url = QUrl()); + + /** + * Set @p widget as the parent widget of the QMenu that will be created + * by createMenuFromGroupingNames(). + * @see createMenuFromGroupingNames() + * @since 5.37 + */ + void setParentWidget(QWidget* widget); + private: /* * NOT USED. REMOVE this when possible. diff --git a/src/kmoretools/kmoretoolsmenufactory.cpp b/src/kmoretools/kmoretoolsmenufactory.cpp --- a/src/kmoretools/kmoretoolsmenufactory.cpp +++ b/src/kmoretools/kmoretoolsmenufactory.cpp @@ -37,6 +37,7 @@ KMoreTools* kmt = nullptr; QMenu* menu = nullptr; + QWidget* parentWidget = nullptr; }; class KMoreToolsLazyMenu : public QMenu @@ -69,7 +70,7 @@ KMoreToolsMenuFactory::~KMoreToolsMenuFactory() { - if (d->menu) { + if (d->menu && !d->menu->parent()) { delete d->menu; } @@ -273,7 +274,7 @@ delete d->menu; } - auto menu = new KMoreToolsLazyMenu(); + auto menu = new KMoreToolsLazyMenu(d->parentWidget); menu->setAboutToShowAction([this, groupingNames, url](QMenu* m) { fillMenuFromGroupingNames(m, groupingNames, url); }); d->menu = menu; @@ -309,3 +310,8 @@ menuBuilder->buildByAppendingToMenu(menu); } + +void KMoreToolsMenuFactory::setParentWidget(QWidget *widget) +{ + d->parentWidget = widget; +}