diff --git a/applets/mediacontroller/contents/ui/ExpandedRepresentation.qml b/applets/mediacontroller/contents/ui/ExpandedRepresentation.qml --- a/applets/mediacontroller/contents/ui/ExpandedRepresentation.qml +++ b/applets/mediacontroller/contents/ui/ExpandedRepresentation.qml @@ -92,7 +92,7 @@ if (event.key === Qt.Key_Space || event.key === Qt.Key_K) { // K is YouTube's key for "play/pause" :) - root.action_playPause() + root.togglePlaying() } else if (event.key === Qt.Key_P) { root.action_previous() } else if (event.key === Qt.Key_N) { @@ -378,7 +378,7 @@ height: width enabled: root.state == "playing" ? root.canPause : root.canPlay iconSource: root.state == "playing" ? "media-playback-pause" : "media-playback-start" - onClicked: root.action_playPause() + onClicked: root.togglePlaying(); } PlasmaComponents.ToolButton { 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 @@ -66,7 +66,7 @@ Plasmoid.toolTipMainText: i18n("No media playing") Plasmoid.toolTipSubText: "" Plasmoid.toolTipTextFormat: Text.PlainText - Plasmoid.status: PlasmaCore.Types.ActiveStatus + Plasmoid.status: PlasmaCore.Types.PassiveStatus Plasmoid.onContextualActionsAboutToShow: { plasmoid.clearActions() @@ -87,15 +87,16 @@ return root.canGoPrevious }) - if (root.state == "playing") { - plasmoid.setAction("playPause", i18nc("Pause playback", "Pause"), "media-playback-pause") - plasmoid.action("playPause").enabled = Qt.binding(function() { - return root.canPause; + // if CanPause, toggle the menu entry between Play & Pause, otherwise always use Play + if (root.state == "playing" && root.canPause) { + plasmoid.setAction("pause", i18nc("Pause playback", "Pause"), "media-playback-pause") + plasmoid.action("pause").enabled = Qt.binding(function() { + return root.state === "playing" && root.canPause; }); } else { - plasmoid.setAction("playPause", i18nc("Start playback", "Play"), "media-playback-start") - plasmoid.action("playPause").enabled = Qt.binding(function() { - return root.canPlay; + plasmoid.setAction("play", i18nc("Start playback", "Play"), "media-playback-start") + plasmoid.action("play").enabled = Qt.binding(function() { + return root.state !== "playing" && root.canPlay; }); } @@ -106,6 +107,9 @@ }) plasmoid.setAction("stop", i18nc("Stop playback", "Stop"), "media-playback-stop") + plasmoid.action("stop").enabled = Qt.binding(function() { + return root.state === "playing" || root.state === "paused"; + }) } if (mpris2Source.currentData.CanQuit) { @@ -139,7 +143,9 @@ Plasmoid.fullRepresentation: ExpandedRepresentation {} Plasmoid.compactRepresentation: PlasmaCore.IconItem { - source: root.state === "playing" ? "media-playback-start" : "media-playback-pause" + source: root.state === "playing" ? "media-playback-start" : + root.state === "paused" ? "media-playback-pause" : + "media-playback-stop" active: compactMouse.containsMouse MouseArea { @@ -150,7 +156,7 @@ onClicked: { switch (mouse.button) { case Qt.MiddleButton: - root.action_playPause() + root.togglePlaying() break case Qt.BackButton: root.action_previous() @@ -188,6 +194,18 @@ mpris2Source.serviceForSource("@multiplex").enableGlobalShortcuts(); } + function togglePlaying() { + if (root.state === "playing") { + if (root.canPause) { + root.action_pause(); + } + } else { + if (root.canPlay) { + root.action_play(); + } + } + } + function action_open() { serviceOp(mpris2Source.current, "Raise"); }