Changeset View
Changeset View
Standalone View
Standalone View
src/kmoretools/kmoretoolsmenufactory.cpp
Show All 31 Lines | |||||
32 | class KMoreToolsMenuFactoryPrivate | 32 | class KMoreToolsMenuFactoryPrivate | ||
33 | { | 33 | { | ||
34 | public: | 34 | public: | ||
35 | // Note that this object must live long enough in case the user opens | 35 | // Note that this object must live long enough in case the user opens | ||
36 | // the "Configure..." dialog | 36 | // the "Configure..." dialog | ||
37 | KMoreTools* kmt = nullptr; | 37 | KMoreTools* kmt = nullptr; | ||
38 | 38 | | |||
39 | QMenu* menu = nullptr; | 39 | QMenu* menu = nullptr; | ||
40 | QWidget* parentWidget = nullptr; | ||||
40 | }; | 41 | }; | ||
41 | 42 | | |||
42 | class KMoreToolsLazyMenu : public QMenu | 43 | class KMoreToolsLazyMenu : public QMenu | ||
43 | { | 44 | { | ||
44 | private Q_SLOTS: | 45 | private Q_SLOTS: | ||
45 | void onAboutToShow() { | 46 | void onAboutToShow() { | ||
46 | //qDebug() << "onAboutToShow"; | 47 | //qDebug() << "onAboutToShow"; | ||
47 | clear(); | 48 | clear(); | ||
Show All 16 Lines | |||||
64 | KMoreToolsMenuFactory::KMoreToolsMenuFactory(const QString& uniqueId) | 65 | KMoreToolsMenuFactory::KMoreToolsMenuFactory(const QString& uniqueId) | ||
65 | : d(new KMoreToolsMenuFactoryPrivate()) | 66 | : d(new KMoreToolsMenuFactoryPrivate()) | ||
66 | { | 67 | { | ||
67 | d->kmt = new KMoreTools(uniqueId); | 68 | d->kmt = new KMoreTools(uniqueId); | ||
68 | } | 69 | } | ||
69 | 70 | | |||
70 | KMoreToolsMenuFactory::~KMoreToolsMenuFactory() | 71 | KMoreToolsMenuFactory::~KMoreToolsMenuFactory() | ||
71 | { | 72 | { | ||
72 | if (d->menu) { | 73 | if (d->menu && !d->menu->parent()) { | ||
73 | delete d->menu; | 74 | delete d->menu; | ||
74 | } | 75 | } | ||
75 | 76 | | |||
76 | delete d->kmt; | 77 | delete d->kmt; | ||
77 | 78 | | |||
78 | delete d; | 79 | delete d; | ||
79 | } | 80 | } | ||
80 | 81 | | |||
▲ Show 20 Lines • Show All 187 Lines • ▼ Show 20 Line(s) | |||||
268 | QMenu* KMoreToolsMenuFactory::createMenuFromGroupingNames( | 269 | QMenu* KMoreToolsMenuFactory::createMenuFromGroupingNames( | ||
269 | const QStringList& groupingNames, | 270 | const QStringList& groupingNames, | ||
270 | const QUrl& url) | 271 | const QUrl& url) | ||
271 | { | 272 | { | ||
272 | if (d->menu) { | 273 | if (d->menu) { | ||
273 | delete d->menu; | 274 | delete d->menu; | ||
274 | } | 275 | } | ||
275 | 276 | | |||
276 | auto menu = new KMoreToolsLazyMenu(); | 277 | auto menu = new KMoreToolsLazyMenu(d->parentWidget); | ||
277 | menu->setAboutToShowAction([this, groupingNames, url](QMenu* m) { fillMenuFromGroupingNames(m, groupingNames, url); }); | 278 | menu->setAboutToShowAction([this, groupingNames, url](QMenu* m) { fillMenuFromGroupingNames(m, groupingNames, url); }); | ||
278 | d->menu = menu; | 279 | d->menu = menu; | ||
279 | 280 | | |||
280 | return d->menu; | 281 | return d->menu; | ||
281 | } | 282 | } | ||
282 | 283 | | |||
283 | void KMoreToolsMenuFactory::fillMenuFromGroupingNames(QMenu* menu, const QStringList& groupingNames, const QUrl& url) | 284 | void KMoreToolsMenuFactory::fillMenuFromGroupingNames(QMenu* menu, const QStringList& groupingNames, const QUrl& url) | ||
284 | { | 285 | { | ||
Show All 19 Lines | 302 | addItemsForGroupingNameWithSpecialHandling(menuBuilder, | |||
304 | groupingName, | 305 | groupingName, | ||
305 | url, | 306 | url, | ||
306 | isMoreSection, | 307 | isMoreSection, | ||
307 | firstMoreSectionDesktopEntryName); | 308 | firstMoreSectionDesktopEntryName); | ||
308 | } | 309 | } | ||
309 | 310 | | |||
310 | menuBuilder->buildByAppendingToMenu(menu); | 311 | menuBuilder->buildByAppendingToMenu(menu); | ||
311 | } | 312 | } | ||
313 | | ||||
314 | void KMoreToolsMenuFactory::setParentWidget(QWidget *widget) | ||||
315 | { | ||||
316 | d->parentWidget = widget; | ||||
317 | } |