diff --git a/applets/appmenu/package/contents/ui/main.qml b/applets/appmenu/package/contents/ui/main.qml --- a/applets/appmenu/package/contents/ui/main.qml +++ b/applets/appmenu/package/contents/ui/main.qml @@ -115,6 +115,7 @@ AppMenuPrivate.AppMenuModel { id: appMenuModel + onRequestActivateIndex: plasmoid.nativeInterface.requestActivateIndex(index) Component.onCompleted: { plasmoid.nativeInterface.model = appMenuModel } diff --git a/applets/appmenu/plugin/appmenumodel.h b/applets/appmenu/plugin/appmenumodel.h --- a/applets/appmenu/plugin/appmenumodel.h +++ b/applets/appmenu/plugin/appmenumodel.h @@ -53,6 +53,9 @@ bool menuAvailable() const; void setMenuAvailable(bool set); +signals: + void requestActivateIndex(int index); + private Q_SLOTS: void onActiveWindowChanged(WId id); void update(); diff --git a/applets/appmenu/plugin/appmenumodel.cpp b/applets/appmenu/plugin/appmenumodel.cpp --- a/applets/appmenu/plugin/appmenumodel.cpp +++ b/applets/appmenu/plugin/appmenumodel.cpp @@ -259,5 +259,13 @@ setMenuAvailable(true); emit modelNeedsUpdate(); }); + + connect(m_importer.data(), &DBusMenuImporter::actionActivationRequested, this, [this](QAction *action) { + // TODO submenus + auto it = std::find(m_activeActions.constBegin(), m_activeActions.constEnd(), action); + if (it != m_activeActions.constEnd()) { + requestActivateIndex(it - m_activeActions.constBegin()); + } + }); }