[gnome-shell] mpris: Hide notification when !CanPlay, instead of closing player
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] mpris: Hide notification when !CanPlay, instead of closing player
- Date: Tue, 29 Oct 2019 19:40:27 +0000 (UTC)
commit 4dc44304dff2974d3b026b5aa58e0d5c25d38216
Author: Philip Chimento <philip endlessm com>
Date: Mon Oct 28 17:11:40 2019 -0700
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
js/ui/mpris.js | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
---
diff --git a/js/ui/mpris.js b/js/ui/mpris.js
index 240e99e5f2..1519e47526 100644
--- a/js/ui/mpris.js
+++ b/js/ui/mpris.js
@@ -44,11 +44,19 @@ class MediaMessage extends MessageList.Message {
this._player.next();
});
- this._player.connect('changed', this._update.bind(this));
- this._player.connect('closed', this.close.bind(this));
+ this._updateHandlerId =
+ this._player.connect('changed', this._update.bind(this));
+ this._closedHandlerId =
+ this._player.connect('closed', this.close.bind(this));
this._update();
}
+ _onDestroy() {
+ super._onDestroy();
+ this._player.disconnect(this._updateHandlerId);
+ this._player.disconnect(this._closedHandlerId);
+ }
+
vfunc_clicked() {
this._player.raise();
Main.panel.closeCalendar();
@@ -217,7 +225,7 @@ var MprisPlayer = class MprisPlayer {
if (visible)
this.emit('show');
else
- this._close();
+ this.emit('hide');
}
}
};
@@ -249,11 +257,14 @@ class MediaSection extends MessageList.MessageListSection {
() => {
this._players.delete(busName);
});
- player.connect('show',
- () => {
- let message = new MediaMessage(player);
- this.addMessage(message, true);
- });
+ player.connect('show', () => {
+ this._message = new MediaMessage(player);
+ this.addMessage(this._message, true);
+ });
+ player.connect('hide', () => {
+ this.removeMessage(this._message, true);
+ this._message = null;
+ });
this._players.set(busName, player);
}
@@ -274,7 +285,10 @@ class MediaSection extends MessageList.MessageListSection {
if (!name.startsWith(MPRIS_PLAYER_PREFIX))
return;
- if (newOwner && !oldOwner)
+ if (newOwner && !oldOwner) {
+ if (this._message)
+ this.removeMessage(this._message);
this._addPlayer(name);
+ }
}
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]