commit b8f951bca3bd3697741c27c2f62adb834843bfef
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
Date:   Wed Aug 31 21:17:24 2011 +0100

    Add a reference to current playlist to clarity widget
    
    * Makes the widget less dependent on making calls to gtkpod_*
    
    * Once we have the playlist, it is important to keep it updated by
      disposing it properly and removing the reference if it is removed.

 plugins/clarity/clarity_widget.c |   28 ++++++++++++++++++++++++----
 plugins/clarity/clarity_widget.h |    7 +++++++
 plugins/clarity/plugin.c         |    1 +
 3 files changed, 32 insertions(+), 4 deletions(-)
---
diff --git a/plugins/clarity/clarity_widget.c b/plugins/clarity/clarity_widget.c
index c0ac143..03c9e7d 100644
--- a/plugins/clarity/clarity_widget.c
+++ b/plugins/clarity/clarity_widget.c
@@ -74,7 +74,10 @@ enum {
  */
 
 static void clarity_widget_dispose(GObject *gobject) {
-    ClarityWidgetPrivate *priv = CLARITY_WIDGET(gobject)->priv;
+    ClarityWidget *cw = CLARITY_WIDGET(gobject);
+    cw->current_playlist = NULL;
+
+    ClarityWidgetPrivate *priv = cw->priv;
     if (priv) {
 
         if (GTK_IS_WIDGET(priv->contentpanel))
@@ -355,7 +358,7 @@ static void _resort_albums(ClarityWidget *self) {
     clarity_canvas_clear(CLARITY_CANVAS(priv->draw_area));
 
     // Resort the albums
-    Playlist *playlist = gtkpod_get_current_playlist();
+    Playlist *playlist = self->current_playlist;
     if (playlist) {
         album_model_resort(priv->album_model, playlist->members);
 
@@ -386,12 +389,17 @@ void clarity_widget_playlist_selected_cb(GtkPodApp *app, 
gpointer pl, gpointer d
 
     ClarityWidget *cw = CLARITY_WIDGET(data);
 
-    clarity_widget_clear(cw);
-
     Playlist *playlist = (Playlist *) pl;
     if (!playlist)
         return;
 
+    if (cw->current_playlist == playlist)
+        // Should already have all these tracks displayed
+        return;
+
+    clarity_widget_clear(cw);
+
+    cw->current_playlist = playlist;
     GList *tracks = playlist->members;
     if (!tracks)
         return;
@@ -399,6 +407,18 @@ void clarity_widget_playlist_selected_cb(GtkPodApp *app, 
gpointer pl, gpointer d
     _init_tracks(cw, tracks);
 }
 
+void clarity_widget_playlist_removed_cb(GtkPodApp *app, gpointer pl, gpointer 
data) {
+    g_return_if_fail(CLARITY_IS_WIDGET(data));
+
+    ClarityWidget *cw = CLARITY_WIDGET(data);
+    Playlist *playlist = (Playlist *) pl;
+    if (!playlist)
+        return;
+
+    if (cw->current_playlist == playlist)
+        clarity_widget_clear(cw);
+}
+
 void clarity_widget_tracks_selected_cb(GtkPodApp *app, gpointer tks, gpointer 
data) {
     g_return_if_fail(CLARITY_IS_WIDGET(data));
 
diff --git a/plugins/clarity/clarity_widget.h b/plugins/clarity/clarity_widget.h
index 70afb0b..d16ce08 100644
--- a/plugins/clarity/clarity_widget.h
+++ b/plugins/clarity/clarity_widget.h
@@ -55,6 +55,12 @@ struct _ClarityWidget {
     /*<private>*/
     GtkBox parent_instance;
 
+    /*
+     * Playlist currently associated
+     * with the display.
+     */
+    Playlist *current_playlist;
+
     /* structure containing private members */
      /*<private>*/
      ClarityWidgetPrivate *priv;
@@ -75,6 +81,7 @@ GtkWidget * clarity_widget_new();
 // Signal callbacks
 void clarity_widget_preference_changed_cb(GtkPodApp *app, gpointer pfname, 
gpointer value, gpointer data);
 void clarity_widget_playlist_selected_cb(GtkPodApp *app, gpointer pl, gpointer 
data);
+void clarity_widget_playlist_removed_cb(GtkPodApp *app, gpointer pl, gpointer 
data);
 void clarity_widget_track_removed_cb(GtkPodApp *app, gpointer tk, gpointer 
data);
 void clarity_widget_tracks_selected_cb(GtkPodApp *app, gpointer tks, gpointer 
data);
 void clarity_widget_track_updated_cb(GtkPodApp *app, gpointer tk, gpointer 
data);
diff --git a/plugins/clarity/plugin.c b/plugins/clarity/plugin.c
index 8e5f9ea..030df02 100644
--- a/plugins/clarity/plugin.c
+++ b/plugins/clarity/plugin.c
@@ -95,6 +95,7 @@ static gboolean activate_plugin(AnjutaPlugin *plugin) {
 
     g_signal_connect (gtkpod_app, SIGNAL_PREFERENCE_CHANGE, G_CALLBACK 
(clarity_widget_preference_changed_cb), clarity_plugin->clarity_widget);
     g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_SELECTED, G_CALLBACK 
(clarity_widget_playlist_selected_cb), clarity_plugin->clarity_widget);
+    g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_REMOVED, G_CALLBACK 
(clarity_widget_playlist_removed_cb), clarity_plugin->clarity_widget);
     g_signal_connect (gtkpod_app, SIGNAL_TRACK_REMOVED, G_CALLBACK 
(clarity_widget_track_removed_cb), clarity_plugin->clarity_widget);
     g_signal_connect (gtkpod_app, SIGNAL_TRACKS_DISPLAYED, G_CALLBACK 
(clarity_widget_tracks_selected_cb), clarity_plugin->clarity_widget);
     g_signal_connect (gtkpod_app, SIGNAL_TRACKS_SELECTED, G_CALLBACK 
(clarity_widget_tracks_selected_cb), clarity_plugin->clarity_widget);

------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to