mpris: Make forward/backward insensitive when unavailable

Media notifications currently always show the forward and backward
buttons as clickable, regardless of whether the corresponding action
is available or not. Media players usually address this by rendering
controls insensitive in this case, so do the same here.

https://bugzilla.gnome.org/show_bug.cgi?id=773884
This commit is contained in:
Florian Müllner
2016-11-03 18:11:54 +01:00
parent 846e3f8243
commit 19816523c7
4 changed files with 24 additions and 3 deletions

View File

@ -912,6 +912,8 @@ StScrollBar {
padding-right: 18px; }
.message-media-control:last-child:rtl {
padding-left: 18px; }
.message-media-control:insensitive {
color: #999999; }
.media-message-cover-icon {
icon-size: 48px !important; }

View File

@ -912,6 +912,8 @@ StScrollBar {
padding-right: 18px; }
.message-media-control:last-child:rtl {
padding-left: 18px; }
.message-media-control:insensitive {
color: #8e8e80; }
.media-message-cover-icon {
icon-size: 48px !important; }

View File

@ -36,6 +36,8 @@ const MprisPlayerIface = '<node> \
<method name="PlayPause" /> \
<method name="Next" /> \
<method name="Previous" /> \
<property name="CanGoNext" type="b" access="read" /> \
<property name="CanGoPrevious" type="b" access="read" /> \
<property name="CanPlay" type="b" access="read" /> \
<property name="Metadata" type="a{sv}" access="read" /> \
<property name="PlaybackStatus" type="s" access="read" /> \
@ -57,7 +59,7 @@ const MediaMessage = new Lang.Class({
this._icon = new St.Icon({ style_class: 'media-message-cover-icon' });
this.setIcon(this._icon);
this.addMediaControl('media-skip-backward-symbolic',
this._prevButton = this.addMediaControl('media-skip-backward-symbolic',
Lang.bind(this, function() {
this._player.previous();
}));
@ -67,7 +69,7 @@ const MediaMessage = new Lang.Class({
this._player.playPause();
}));
this.addMediaControl('media-skip-forward-symbolic',
this._nextButton = this.addMediaControl('media-skip-forward-symbolic',
Lang.bind(this, function() {
this._player.next();
}));
@ -82,6 +84,10 @@ const MediaMessage = new Lang.Class({
Main.panel.closeCalendar();
},
_updateNavButton: function(button, sensitive) {
button.reactive = sensitive;
},
_update: function() {
this.setTitle(this._player.trackArtists.join(', '));
this.setBody(this._player.trackTitle);
@ -99,6 +105,9 @@ const MediaMessage = new Lang.Class({
let iconName = isPlaying ? 'media-playback-pause-symbolic'
: 'media-playback-start-symbolic';
this._playPauseButton.child.icon_name = iconName;
this._updateNavButton(this._prevButton, this._player.canGoPrevious);
this._updateNavButton(this._nextButton, this._player.canGoNext);
}
});
@ -139,10 +148,18 @@ const MprisPlayer = new Lang.Class({
this._playerProxy.PlayPauseRemote();
},
get canGoNext() {
return this._playerProxy.CanGoNext;
},
next: function() {
this._playerProxy.NextRemote();
},
get canGoPrevious() {
return this._playerProxy.CanGoPrevious;
},
previous: function() {
this._playerProxy.PreviousRemote();
},