[gnome-music] player: Sync buttons when playlist is modified



commit 25cfb09da2cd69827318410e15ef1f69ef3dba08
Author: Arnel A. Borja <arnelborja src gnome org>
Date:   Sun Sep 1 22:53:20 2013 +0800

    player: Sync buttons when playlist is modified
    
    Sync prev and next buttons when a track gets added or removed in the
    current playlist.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705855

 gnomemusic/player.py |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
---
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index fd512ef..4d6db37 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -100,6 +100,9 @@ class Player(GObject.GObject):
         self.bus.connect('message::eos', self._on_bus_eos)
         self._setup_view()
 
+        self.playlist_insert_handler = 0
+        self.playlist_delete_handler = 0
+
     def discover_item(self, item, callback, data=None):
         url = item.get_url()
         if not url:
@@ -185,6 +188,9 @@ class Player(GObject.GObject):
         self.currentTrack = self.nextTrack
         self.play()
 
+    def _on_playlist_size_changed(self, path, _iter=None, data=None):
+        self._sync_prev_next()
+
     def _get_next_track(self):
         currentTrack = self.playlist.get_iter(self.currentTrack.get_path())
         nextTrack = None
@@ -392,11 +398,20 @@ class Player(GObject.GObject):
     def set_playlist(self, type, id, model, iter, field):
         self.stop()
 
+        if self.playlist_insert_handler:
+            self.playlist.disconnect(self.playlist_insert_handler)
+        if self.playlist_delete_handler:
+            self.playlist.disconnect(self.playlist_delete_handler)
+
         self.playlist = model
         self.playlistType = type
         self.playlistId = id
         self.currentTrack = Gtk.TreeRowReference.new(model, model.get_path(iter))
         self.playlistField = field
+
+        self.playlist_insert_handler = model.connect('row-inserted', self._on_playlist_size_changed)
+        self.playlist_delete_handler = model.connect('row-deleted', self._on_playlist_size_changed)
+
         self.emit('current-changed')
 
     def running_playlist(self, type, id):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]