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