diff --git a/applets/taskmanager/package/contents/ui/ContextMenu.qml b/applets/taskmanager/package/contents/ui/ContextMenu.qml --- a/applets/taskmanager/package/contents/ui/ContextMenu.qml +++ b/applets/taskmanager/package/contents/ui/ContextMenu.qml @@ -118,7 +118,8 @@ var playerData = mpris2Source.data[sourceName] if (playerData.CanControl) { - var menuItem = menu.newMenuItem(menu); + var playing = (playerData.PlaybackStatus === "Playing"), + menuItem = menu.newMenuItem(menu); menuItem.text = i18nc("Play previous track", "Previous Track"); menuItem.icon = "media-skip-backward"; menuItem.enabled = Qt.binding(function() { @@ -132,16 +133,21 @@ menuItem = menu.newMenuItem(menu); // PlasmaCore Menu doesn't actually handle icons or labels changing at runtime... menuItem.text = Qt.binding(function() { - return playerData.PlaybackStatus === "Playing" ? i18nc("Pause playback", "Pause") : i18nc("Start playback", "Play"); + // if CanPause, toggle the menu between Play & Pause, otherwise always use Play + return playing && playerData.CanPause ? i18nc("Pause playback", "Pause") : i18nc("Start playback", "Play"); }); menuItem.icon = Qt.binding(function() { - return playerData.PlaybackStatus === "Playing" ? "media-playback-pause" : "media-playback-start"; + return playing && playerData.CanPause ? "media-playback-pause" : "media-playback-start"; }); menuItem.enabled = Qt.binding(function() { - return playerData.PlaybackStatus === "Playing" ? playerData.CanPause : playerData.CanPlay; + return playing ? playerData.CanPause : playerData.CanPlay; }); menuItem.clicked.connect(function() { - mpris2Source.playPause(sourceName); + if (playerData.CanPause) { + mpris2Source.playPause(sourceName); + } else { + mpris2Source.play(sourceName); + } }); menu.addMenuItem(menuItem, virtualDesktopsMenuItem); @@ -159,6 +165,9 @@ menuItem = menu.newMenuItem(menu); menuItem.text = i18nc("Stop playback", "Stop"); menuItem.icon = "media-playback-stop"; + menuItem.enabled = Qt.binding(function() { + return playerData.PlaybackStatus !== "Stopped"; + }); menuItem.clicked.connect(function() { mpris2Source.stop(sourceName); }); diff --git a/applets/taskmanager/package/contents/ui/main.qml b/applets/taskmanager/package/contents/ui/main.qml --- a/applets/taskmanager/package/contents/ui/main.qml +++ b/applets/taskmanager/package/contents/ui/main.qml @@ -272,6 +272,9 @@ function goNext(source) { startOperation(source, "Next"); } + function play(source) { + startOperation(source, "Play"); + } function playPause(source) { startOperation(source, "PlayPause"); }