# # SVN commit 942814 by cloose: # # Make context menu work for submenus # # Pass QMenu* along with customContextMenuRequested() signal and use activeAction() to # retrieve the highlighted action. # diff -Naur plasma/applets/kickoff/simpleapplet/menuview.cpp plasma/applets/kickoff/simpleapplet/menuview.cpp --- plasma/applets/kickoff/simpleapplet/menuview.cpp 2009-03-22 18:51:45.000000000 +0100 +++ plasma/applets/kickoff/simpleapplet/menuview.cpp 2009-03-22 18:55:01.000000000 +0100 @@ -63,6 +63,10 @@ KMenu *childMenu = new KMenu(parent); childMenu->installEventFilter(q); + childMenu->setContextMenuPolicy(Qt::CustomContextMenu); + connect(childMenu, SIGNAL(customContextMenuRequested(const QPoint&)), + q, SLOT(contextMenuRequested(const QPoint&))); + action = childMenu->menuAction(); if (model->canFetchMore(index)) { @@ -107,6 +111,9 @@ setIcon(icon); installEventFilter(this); + + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(contextMenuRequested(const QPoint&))); } MenuView::~MenuView() @@ -438,4 +445,10 @@ } } +void MenuView::contextMenuRequested(const QPoint& pos) +{ + KMenu* menu = qobject_cast<KMenu*>(sender()); + emit customContextMenuRequested(menu, pos); +} + #include "menuview.moc" diff -Naur plasma/applets/kickoff/simpleapplet/menuview.h plasma/applets/kickoff/simpleapplet/menuview.h --- plasma/applets/kickoff/simpleapplet/menuview.h 2009-03-22 18:51:45.000000000 +0100 +++ plasma/applets/kickoff/simpleapplet/menuview.h 2009-03-22 18:59:34.000000000 +0100 @@ -143,6 +143,7 @@ * An item in the menu got triggered. */ void actionTriggered(QAction* action); + void contextMenuRequested(const QPoint& pos); Q_SIGNALS: /** @@ -150,6 +151,7 @@ * got hidden. */ void afterBeingHidden(); + void customContextMenuRequested(QMenu* menu, const QPoint& pos); private Q_SLOTS: /// new items have been inserted into the model diff -Naur plasma/applets/kickoff/simpleapplet/simpleapplet.h plasma/applets/kickoff/simpleapplet/simpleapplet.h --- plasma/applets/kickoff/simpleapplet/simpleapplet.h 2009-03-22 18:51:45.000000000 +0100 +++ plasma/applets/kickoff/simpleapplet/simpleapplet.h 2009-03-22 19:03:26.000000000 +0100 @@ -116,7 +116,7 @@ /** * Show a custom context menu for the selected action. */ - void customContextMenuRequested(const QPoint& pos); + void customContextMenuRequested(QMenu* menu, const QPoint& pos); protected: /** --- plasma/applets/kickoff/simpleapplet/simpleapplet.cpp~ 2009-04-02 05:50:31.000000000 +0200 +++ plasma/applets/kickoff/simpleapplet/simpleapplet.cpp 2009-04-02 05:53:35.000000000 +0200 @@ -396,13 +396,13 @@ KProcess::execute("kmenuedit"); } -void MenuLauncherApplet::customContextMenuRequested(const QPoint& pos) +void MenuLauncherApplet::customContextMenuRequested(QMenu* menu, const QPoint& pos) { - if (!d->menuview) { + if (!menu) { return; } - QAction* menuAction = d->menuview->actionAt(pos); + QAction* menuAction = menu->activeAction(); if (menuAction) { const QPersistentModelIndex index = menuAction->data().value<QPersistentModelIndex>(); d->contextMenuFactory->showContextMenu(0, index, pos); @@ -554,8 +554,8 @@ d->menuview->setContextMenuPolicy(Qt::CustomContextMenu); connect(d->menuview, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*))); connect(d->menuview, SIGNAL(aboutToHide()), d->icon, SLOT(setUnpressed())); - connect(d->menuview, SIGNAL(customContextMenuRequested(const QPoint&)), - this, SLOT(customContextMenuRequested(const QPoint&))); + connect(d->menuview, SIGNAL(customContextMenuRequested(QMenu*, const QPoint&)), + this, SLOT(customContextMenuRequested(QMenu*, const QPoint&))); //connect(d->menuview, SIGNAL(afterBeingHidden()), d->menuview, SLOT(deleteLater())); KConfig *cfg = new KConfig("mandrivarc"); KConfigGroup grp = cfg->group("menu");