Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > 9e8230873ca69f393e5304ceb1afeac2 > files > 35

kdebase4-workspace-4.2.4-0.6mdv2009.0.src.rpm

# 
# 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");