mpris: Hide notification when !CanPlay, instead of closing player
I have observed a client in the wild (Chromium again) set CanPlay to false momentarily while it is loading the next song. Previously, the code would close the player proxy in that case, meaning that after playing one track, the MPRIS message would disappear and never come back. However, I think this use of CanPlay, while apparently not usual, is not incorrect according to the spec. We should hide the message instead of closing the player proxy. https://gitlab.gnome.org/GNOME/gnome-shell/issues/1362
This commit is contained in:
parent
975280fc50
commit
4dc44304df
@ -44,11 +44,19 @@ class MediaMessage extends MessageList.Message {
|
|||||||
this._player.next();
|
this._player.next();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._updateHandlerId =
|
||||||
this._player.connect('changed', this._update.bind(this));
|
this._player.connect('changed', this._update.bind(this));
|
||||||
|
this._closedHandlerId =
|
||||||
this._player.connect('closed', this.close.bind(this));
|
this._player.connect('closed', this.close.bind(this));
|
||||||
this._update();
|
this._update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_onDestroy() {
|
||||||
|
super._onDestroy();
|
||||||
|
this._player.disconnect(this._updateHandlerId);
|
||||||
|
this._player.disconnect(this._closedHandlerId);
|
||||||
|
}
|
||||||
|
|
||||||
vfunc_clicked() {
|
vfunc_clicked() {
|
||||||
this._player.raise();
|
this._player.raise();
|
||||||
Main.panel.closeCalendar();
|
Main.panel.closeCalendar();
|
||||||
@ -217,7 +225,7 @@ var MprisPlayer = class MprisPlayer {
|
|||||||
if (visible)
|
if (visible)
|
||||||
this.emit('show');
|
this.emit('show');
|
||||||
else
|
else
|
||||||
this._close();
|
this.emit('hide');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -249,10 +257,13 @@ class MediaSection extends MessageList.MessageListSection {
|
|||||||
() => {
|
() => {
|
||||||
this._players.delete(busName);
|
this._players.delete(busName);
|
||||||
});
|
});
|
||||||
player.connect('show',
|
player.connect('show', () => {
|
||||||
() => {
|
this._message = new MediaMessage(player);
|
||||||
let message = new MediaMessage(player);
|
this.addMessage(this._message, true);
|
||||||
this.addMessage(message, true);
|
});
|
||||||
|
player.connect('hide', () => {
|
||||||
|
this.removeMessage(this._message, true);
|
||||||
|
this._message = null;
|
||||||
});
|
});
|
||||||
this._players.set(busName, player);
|
this._players.set(busName, player);
|
||||||
}
|
}
|
||||||
@ -274,7 +285,10 @@ class MediaSection extends MessageList.MessageListSection {
|
|||||||
if (!name.startsWith(MPRIS_PLAYER_PREFIX))
|
if (!name.startsWith(MPRIS_PLAYER_PREFIX))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (newOwner && !oldOwner)
|
if (newOwner && !oldOwner) {
|
||||||
|
if (this._message)
|
||||||
|
this.removeMessage(this._message);
|
||||||
this._addPlayer(name);
|
this._addPlayer(name);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user