commit b8f951bca3bd3697741c27c2f62adb834843bfef
Author: phantomjinx <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2