File 0044-Activation-support-in-appmenu.patch of Package plasma5-workspace

From 7d10d0b2ff1fe3c3738c838554cc192ac34de7ef Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Thu, 23 Mar 2017 10:34:50 +0100
Subject: [PATCH 44/44] Activation support in appmenu

Based off d_ed's experiment. Seems to work, but not tested well enough yet.
---
 applets/appmenu/package/contents/ui/main.qml | 11 ++++++++++-
 applets/appmenu/plugin/appmenumodel.cpp      |  7 +++++++
 applets/appmenu/plugin/appmenumodel.h        |  1 +
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/applets/appmenu/package/contents/ui/main.qml b/applets/appmenu/package/contents/ui/main.qml
index 5799b4bb..f2eb5ce8 100644
--- a/applets/appmenu/package/contents/ui/main.qml
+++ b/applets/appmenu/package/contents/ui/main.qml
@@ -80,7 +80,6 @@ Item {
         Connections {
             target: plasmoid.nativeInterface
             onRequestActivateIndex: {
-                var idx = Math.max(0, Math.min(buttonRepeater.count - 1, index))
                 var button = buttonRepeater.itemAt(index)
                 if (button) {
                     button.clicked()
@@ -88,6 +87,16 @@ Item {
             }
         }
 
+        Connections {
+            target: appMenuModel
+            onModelItemActivated: {
+                var button = buttonRepeater.itemAt(row)
+                if (button) {
+                    button.clicked()
+                }
+            }
+        }
+
         Repeater {
             id: buttonRepeater
             model: appMenuModel
diff --git a/applets/appmenu/plugin/appmenumodel.cpp b/applets/appmenu/plugin/appmenumodel.cpp
index 62f6e80d..08cae4c7 100644
--- a/applets/appmenu/plugin/appmenumodel.cpp
+++ b/applets/appmenu/plugin/appmenumodel.cpp
@@ -243,6 +243,13 @@ void AppMenuModel::updateApplicationMenu(const QString &serviceName, const QStri
     m_importer = new KDBusMenuImporter(serviceName, menuObjectPath, this);
     QMetaObject::invokeMethod(m_importer, "updateMenu", Qt::QueuedConnection);
 
+    connect(m_importer.data(), &DBusMenuImporter::actionActivationRequested, this, [=](QAction *action) {
+        int idx = m_activeActions.indexOf(action);
+        if (idx >= 0) {
+            emit modelItemActivated(idx);
+        }
+    });
+
     connect(m_importer.data(), &DBusMenuImporter::menuUpdated, this, [=](QMenu *menu) {
         m_menu = m_importer->menu();
         if (m_menu.isNull() || menu != m_menu) {
diff --git a/applets/appmenu/plugin/appmenumodel.h b/applets/appmenu/plugin/appmenumodel.h
index 77ad5e9d..565ea931 100644
--- a/applets/appmenu/plugin/appmenumodel.h
+++ b/applets/appmenu/plugin/appmenumodel.h
@@ -60,6 +60,7 @@ private Q_SLOTS:
 signals:
     void menuAvailableChanged();
     void modelNeedsUpdate();
+    void modelItemActivated(int row);
 
 private:
     bool m_menuAvailable;
-- 
2.12.0

openSUSE Build Service is sponsored by