diff --git a/src/elisaapplication.h b/src/elisaapplication.h --- a/src/elisaapplication.h +++ b/src/elisaapplication.h @@ -82,6 +82,10 @@ Q_INVOKABLE QString iconName(const QIcon& icon); + Q_INVOKABLE void installKeyEventFilter(QObject *object); + + bool eventFilter(QObject *object, QEvent *event) override; + const ElisaUtils::EntryDataList &arguments() const; MusicListenersManager *musicManager() const; @@ -153,6 +157,8 @@ void scrub(); + void playPause(); + private: void initializeModels(); diff --git a/src/elisaapplication.cpp b/src/elisaapplication.cpp --- a/src/elisaapplication.cpp +++ b/src/elisaapplication.cpp @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -159,6 +160,11 @@ d->mCollection.setDefaultShortcut(scrubAction, QKeySequence(tr("Shift+Left"))); } + if (actionName == QStringLiteral("Play-Pause") && KAuthorized::authorizeAction(actionName)) { + auto playPauseAction = d->mCollection.addAction(actionName, this, &ElisaApplication::playPause); + d->mCollection.setDefaultShortcut(playPauseAction, QKeySequence(tr("Space"))); + } + if (actionName == QStringLiteral("edit_find") && KAuthorized::authorizeAction(actionName)) { auto findAction = KStandardAction::find(this, &ElisaApplication::find, this); d->mCollection.addAction(findAction->objectName(), findAction); @@ -277,6 +283,8 @@ void ElisaApplication::scrub() {} +void ElisaApplication::playPause() {} + ElisaUtils::EntryDataList ElisaApplication::checkFileListAndMakeAbsolute(const ElisaUtils::EntryDataList &filesList, const QString &workingDirectory) const { @@ -409,6 +417,28 @@ return icon.name(); } +void ElisaApplication::installKeyEventFilter(QObject *object) +{ + if(!object) { + return; + } + + object->installEventFilter(this); +} + +bool ElisaApplication::eventFilter(QObject *object, QEvent *event) +{ + Q_UNUSED(object); + + QKeyEvent *keyEvent = static_cast(event); + auto playPauseAction = d->mCollection.action(tr("Play-Pause")); + if (keyEvent->key() == Qt::Key_Space && playPauseAction->shortcut()[0] == Qt::Key_Space) { + return true; + } + + return false; +} + const ElisaUtils::EntryDataList &ElisaApplication::arguments() const { return d->mArguments; diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -43,6 +43,7 @@ property var goBackAction: elisa.action("go_back") property var seekAction: elisa.action("Seek") property var scrubAction: elisa.action("Scrub") + property var playPauseAction: elisa.action("Play-Pause") Action { shortcut: goBackAction.shortcut @@ -59,6 +60,11 @@ onTriggered: elisa.audioControl.seek(headerBar.playerControl.position - 10000) } + Action { + shortcut: playPauseAction.shortcut + onTriggered: elisa.audioControl.playPause() + } + ApplicationMenu { id: applicationMenu } diff --git a/src/qml/FlatButtonWithToolTip.qml b/src/qml/FlatButtonWithToolTip.qml --- a/src/qml/FlatButtonWithToolTip.qml +++ b/src/qml/FlatButtonWithToolTip.qml @@ -26,6 +26,10 @@ Button { id: flatButtonWithToolTip + activeFocusOnTab: true + + Keys.onReturnPressed: action.trigger() + contentItem: Image { anchors.fill: parent diff --git a/src/qml/MediaPlayListView.qml b/src/qml/MediaPlayListView.qml --- a/src/qml/MediaPlayListView.qml +++ b/src/qml/MediaPlayListView.qml @@ -137,10 +137,25 @@ Item { Layout.fillWidth: true } - Controls1.ToolButton { action: showCurrentTrack } - Controls1.ToolButton { action: savePlaylist } - Controls1.ToolButton { action: loadPlaylist } - Controls1.ToolButton { action: clearPlayList } + Controls1.ToolButton { + action: showCurrentTrack + Keys.onReturnPressed: action.trigger() + } + + Controls1.ToolButton { + action: savePlaylist + Keys.onReturnPressed: action.trigger() + } + + Controls1.ToolButton { + action: loadPlaylist + Keys.onReturnPressed: action.trigger() + } + + Controls1.ToolButton { + action: clearPlayList + Keys.onReturnPressed: action.trigger() + } } ColumnLayout { diff --git a/src/qml/MediaPlayerControl.qml b/src/qml/MediaPlayerControl.qml --- a/src/qml/MediaPlayerControl.qml +++ b/src/qml/MediaPlayerControl.qml @@ -128,7 +128,7 @@ spacing: 5 FlatButtonWithToolTip { - id: minimzeMaximizeAction + id: minimizeMaximizeButton action: minimizeMaximizeAction Layout.preferredWidth: elisaTheme.smallControlButtonSize @@ -423,5 +423,17 @@ musicWidget.minimize() } } + + Component.onCompleted: { + + var elementList = [menuButton, repeatButton, shuffleButton, muteButton, skipForwardButton, skipBackwardButton, playPauseButton, minimizeMaximizeButton] + + for (var i=0; i