diff --git a/applets/mediacontroller/contents/ui/main.qml b/applets/mediacontroller/contents/ui/main.qml --- a/applets/mediacontroller/contents/ui/main.qml +++ b/applets/mediacontroller/contents/ui/main.qml @@ -184,6 +184,10 @@ } } + Component.onCompleted: { + mpris2Source.serviceForSource("@multiplex").enableGlobalShortcuts(); + } + function action_open() { serviceOp(mpris2Source.current, "Raise"); } diff --git a/dataengines/mpris2/multiplexedservice.h b/dataengines/mpris2/multiplexedservice.h --- a/dataengines/mpris2/multiplexedservice.h +++ b/dataengines/mpris2/multiplexedservice.h @@ -26,6 +26,7 @@ class Multiplexer; class PlayerControl; +class KActionCollection; class MultiplexedService : public Plasma::Service { @@ -38,12 +39,16 @@ Plasma::ServiceJob *createJob(const QString &operation, QMap ¶meters) override; +public Q_SLOTS: + void enableGlobalShortcuts(); + private Q_SLOTS: void updateEnabledOperations(); void activePlayerChanged(PlayerContainer *container); private: QPointer m_control; + KActionCollection *m_actionCollection = nullptr; }; #endif // MULTIPLEXEDSERVICE_H diff --git a/dataengines/mpris2/multiplexedservice.cpp b/dataengines/mpris2/multiplexedservice.cpp --- a/dataengines/mpris2/multiplexedservice.cpp +++ b/dataengines/mpris2/multiplexedservice.cpp @@ -21,6 +21,11 @@ #include "multiplexer.h" #include "playercontrol.h" +#include + +#include +#include +#include MultiplexedService::MultiplexedService(Multiplexer *multiplexer, QObject *parent) : Plasma::Service(parent) @@ -70,3 +75,56 @@ updateEnabledOperations(); } +void MultiplexedService::enableGlobalShortcuts() +{ + if (m_actionCollection) { + return; + } + + m_actionCollection = new KActionCollection(this, QStringLiteral("mediacontrol")); + m_actionCollection->setComponentDisplayName(i18nc("Name for global shortcuts category", "Media Controller")); + QAction *playPauseAction = m_actionCollection->addAction(QStringLiteral("playpausemedia")); + playPauseAction->setText(i18n("Play/Pause media playback")); + KGlobalAccel::setGlobalShortcut(playPauseAction, Qt::Key_MediaPlay); + connect(playPauseAction, &QAction::triggered, this, + [this] { + if (m_control) { + m_control->playerInterface()->PlayPause(); + } + } + ); + + QAction *nextAction = m_actionCollection->addAction(QStringLiteral("nextmedia")); + nextAction->setText(i18n("Media playback next")); + KGlobalAccel::setGlobalShortcut(nextAction, Qt::Key_MediaNext); + connect(nextAction, &QAction::triggered, this, + [this] { + if (m_control) { + m_control->playerInterface()->Next(); + } + } + ); + + QAction *previousAction = m_actionCollection->addAction(QStringLiteral("previousmedia")); + previousAction->setText(i18n("Media playback previous")); + KGlobalAccel::setGlobalShortcut(previousAction, Qt::Key_MediaPrevious); + connect(previousAction, &QAction::triggered, this, + [this] { + if (m_control) { + m_control->playerInterface()->Previous(); + } + } + ); + + QAction *stopAction = m_actionCollection->addAction(QStringLiteral("stopmedia")); + stopAction->setText(i18n("Stop media playback")); + KGlobalAccel::setGlobalShortcut(stopAction, Qt::Key_MediaStop); + connect(stopAction, &QAction::triggered, this, + [this] { + if (m_control) { + m_control->playerInterface()->Stop(); + } + } + ); +} + diff --git a/dataengines/mpris2/multiplexer.cpp b/dataengines/mpris2/multiplexer.cpp --- a/dataengines/mpris2/multiplexer.cpp +++ b/dataengines/mpris2/multiplexer.cpp @@ -20,8 +20,6 @@ #include "multiplexer.h" #include -#include -#include #include #include // for Q_ASSERT @@ -36,53 +34,6 @@ : DataContainer(parent) { setObjectName(sourceName); - - // setup actions - KActionCollection *actionCollection = new KActionCollection(this, QStringLiteral("mediacontrol")); - actionCollection->setComponentDisplayName(i18nc("Name for global shortcuts category", "Media Controller")); - QAction *playPauseAction = actionCollection->addAction(QStringLiteral("playpausemedia")); - playPauseAction->setText(i18n("Play/Pause media playback")); - KGlobalAccel::setGlobalShortcut(playPauseAction, Qt::Key_MediaPlay); - connect(playPauseAction, &QAction::triggered, this, - [this] { - if (PlayerContainer *active = activePlayer()) { - active->playerInterface()->PlayPause(); - } - } - ); - - QAction *nextAction = actionCollection->addAction(QStringLiteral("nextmedia")); - nextAction->setText(i18n("Media playback next")); - KGlobalAccel::setGlobalShortcut(nextAction, Qt::Key_MediaNext); - connect(nextAction, &QAction::triggered, this, - [this] { - if (PlayerContainer *active = activePlayer()) { - active->playerInterface()->Next(); - } - } - ); - - QAction *previousAction = actionCollection->addAction(QStringLiteral("previousmedia")); - previousAction->setText(i18n("Media playback previous")); - KGlobalAccel::setGlobalShortcut(previousAction, Qt::Key_MediaPrevious); - connect(previousAction, &QAction::triggered, this, - [this] { - if (PlayerContainer *active = activePlayer()) { - active->playerInterface()->Previous(); - } - } - ); - - QAction *stopAction = actionCollection->addAction(QStringLiteral("stopmedia")); - stopAction->setText(i18n("Stop media playback")); - KGlobalAccel::setGlobalShortcut(stopAction, Qt::Key_MediaStop); - connect(stopAction, &QAction::triggered, this, - [this] { - if (PlayerContainer *active = activePlayer()) { - active->playerInterface()->Stop(); - } - } - ); } void Multiplexer::addPlayer(PlayerContainer *container)