[gnome-music/wip/jfelder/player-repeatmode-fix: 2/3] player: Synchronize Player and PlayerPlaylist repeat_mode
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/player-repeatmode-fix: 2/3] player: Synchronize Player and PlayerPlaylist repeat_mode
- Date: Thu, 20 Sep 2018 06:11:49 +0000 (UTC)
commit 0d474cb4361f898e2425df40a77d72151ec95803
Author: Jean Felder <jfelder src gnome org>
Date: Wed Sep 19 14:24:52 2018 +0200
player: Synchronize Player and PlayerPlaylist repeat_mode
Repeat mode is saved in a setting. PlayerToolbar repeat_mode property
is initialized from this setting and listens to its changes.
There are two ways to change the repeat mode.
First, from the PlayerToolbar. It updates an action associated with
the setting. This change triggers the 'changed::repeat' signal of the
setting which updates PlayerPlaylist repeat_mode property. It also
updates Player repeat_mode property because of a binding. However,
this binding is unidirectional.
It is also possible to change the repeat mode by using shortcuts (for
example Ctrl + r). This updates Player repeat_mode property but not
the PlayerPlaylist one as the binding is unidirectional. Therefore,
the player toolbar icon is not updated and the setting is unchanged.
Make the binding bidirectional to fix this issue. Create the binding
at instantion time because it does not need to be updated when a
playlist changes.
Update The repeat setting in PlayerPlaylist repeat_mode setter.
gnomemusic/player.py | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
---
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index 773816df..ae9aae32 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -445,6 +445,9 @@ class PlayerPlaylist(GObject.GObject):
:param RepeatMode mode: new repeat_mode
"""
+ if mode == self._repeat:
+ return
+
if (mode == RepeatMode.SHUFFLE
and self._songs):
self._shuffle_indexes = list(range(len(self._songs)))
@@ -453,6 +456,7 @@ class PlayerPlaylist(GObject.GObject):
self._shuffle_indexes.insert(0, self._current_index)
self._repeat = mode
+ self._settings.set_enum('repeat', mode)
@GObject.Property(type=int, flags=GObject.ParamFlags.READABLE)
def playlist_id(self):
@@ -514,6 +518,10 @@ class Player(GObject.GObject):
self._playlist = PlayerPlaylist()
self._playlist.connect('song-validated', self._on_song_validated)
+ self._playlist.bind_property(
+ 'repeat-mode', self, 'repeat-mode',
+ GObject.BindingFlags.SYNC_CREATE |
+ GObject.BindingFlags.BIDIRECTIONAL)
self._new_clock = True
@@ -657,10 +665,6 @@ class Player(GObject.GObject):
if self._player.state == Playback.PLAYING:
self.emit('prev-next-invalidated')
- self._playlist.bind_property(
- 'repeat_mode', self, 'repeat_mode',
- GObject.BindingFlags.SYNC_CREATE)
-
if playlist_changed:
self.emit('playlist-changed')
@@ -761,10 +765,11 @@ class Player(GObject.GObject):
@GObject.Property(type=int)
def repeat_mode(self):
- return self._playlist.props.repeat_mode
+ return self._repeat
@repeat_mode.setter
def repeat_mode(self, mode):
+ self._repeat = mode
self.emit('repeat-mode-changed')
self.emit('prev-next-invalidated')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]