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 @@ -376,7 +376,7 @@ PlasmaComponents.ToolButton { width: Math.round(expandedRepresentation.controlSize * 1.5) height: width - enabled: playerControls.enabled + enabled: root.state == "playing" ? root.canPause : root.canPlay iconSource: root.state == "playing" ? "media-playback-pause" : "media-playback-start" onClicked: root.action_playPause() } 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 @@ -57,6 +57,8 @@ readonly property bool canControl: !root.noPlayer && mpris2Source.currentData.CanControl readonly property bool canGoPrevious: canControl && mpris2Source.currentData.CanGoPrevious readonly property bool canGoNext: canControl && mpris2Source.currentData.CanGoNext + readonly property bool canPlay: canControl && mpris2Source.currentData.CanPlay + readonly property bool canPause: canControl && mpris2Source.currentData.CanPause Plasmoid.switchWidth: units.gridUnit * 14 Plasmoid.switchHeight: units.gridUnit * 10 @@ -87,8 +89,14 @@ if (root.state == "playing") { plasmoid.setAction("playPause", i18nc("Pause playback", "Pause"), "media-playback-pause") + plasmoid.action("playPause").enabled = Qt.binding(function() { + return 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("next", i18nc("Play next track", "Next Track"), diff --git a/dataengines/mpris2/playercontainer.cpp b/dataengines/mpris2/playercontainer.cpp --- a/dataengines/mpris2/playercontainer.cpp +++ b/dataengines/mpris2/playercontainer.cpp @@ -77,6 +77,10 @@ return QVariant::Bool; else if (propName == QLatin1String("CanQuit")) return QVariant::Bool; + else if (propName == QLatin1String("CanPlay")) + return QVariant::Bool; + else if (propName == QLatin1String("CanPause")) + return QVariant::Bool; return QVariant::Invalid; } @@ -100,6 +104,10 @@ return PlayerContainer::CanGoNext; else if (capName == QLatin1String("CanGoPrevious")) return PlayerContainer::CanGoPrevious; + else if (capName == QLatin1String("CanPlay")) + return PlayerContainer::CanPlay; + else if (capName == QLatin1String("CanPause")) + return PlayerContainer::CanPause; return PlayerContainer::NoCaps; }