commit 4d91390c29bca549e668c4c25879ace43838a59d Author: phantomjinx <p.g.richard...@phantomjinx.co.uk> Date: Thu Sep 1 21:29:31 2011 +0100
Ensure tracks are sorted before selecting * Highlighting the displayed tracks in clarity plugin selects the first track in the list rather than the first track according to the sort preference. * Sort the tracks first before selecting the first track. plugins/clarity/album_model.c | 27 ++++++++++++++++++++------- plugins/clarity/album_model.h | 2 ++ plugins/clarity/clarity_widget.c | 22 +++++++++++++++++++++- 3 files changed, 43 insertions(+), 8 deletions(-) --- diff --git a/plugins/clarity/album_model.c b/plugins/clarity/album_model.c index f495118..cab5e41 100644 --- a/plugins/clarity/album_model.c +++ b/plugins/clarity/album_model.c @@ -85,15 +85,28 @@ static AlbumItem *_create_album_item(Track *track) { * @b: second album key to compare * */ -static gint _compare_album_item_keys(gchar *a, gchar *b) { +static gint _compare_album_keys(gchar *a, gchar *b) { if (a == NULL) return -1; if (b == NULL) - return -1; + return 1; return compare_string(a, b, prefs_get_int("clarity_case_sensitive")); } +gint compare_tracks(Track *a, Track *b) { + if (!a) + return -1; + + if (!b) + return 1; + + gchar *keya = _create_key_from_track(a); + gchar *keyb = _create_key_from_track(b); + + return _compare_album_keys(keya, keyb); +} + void _index_album_item(AlbumModelPrivate *priv, gchar *album_key, AlbumItem *item) { enum GtkPodSortTypes value = prefs_get_int("clarity_sort"); @@ -101,13 +114,13 @@ void _index_album_item(AlbumModelPrivate *priv, gchar *album_key, AlbumItem *ite switch(value) { case SORT_ASCENDING: - priv->album_key_list = g_list_insert_sorted(priv->album_key_list, album_key, (GCompareFunc) _compare_album_item_keys); + priv->album_key_list = g_list_insert_sorted(priv->album_key_list, album_key, (GCompareFunc) _compare_album_keys); break; case SORT_DESCENDING: /* Already in descending order so reverse into ascending order */ priv->album_key_list = g_list_reverse(priv->album_key_list); /* Insert the track */ - priv->album_key_list = g_list_insert_sorted(priv->album_key_list, album_key, (GCompareFunc) _compare_album_item_keys); + priv->album_key_list = g_list_insert_sorted(priv->album_key_list, album_key, (GCompareFunc) _compare_album_keys); /* Reverse again */ priv->album_key_list = g_list_reverse(priv->album_key_list); break; @@ -227,10 +240,10 @@ void album_model_resort(AlbumModel *model, GList *tracks) { switch (value) { case SORT_ASCENDING: - priv->album_key_list = g_list_sort(priv->album_key_list, (GCompareFunc) _compare_album_item_keys); + priv->album_key_list = g_list_sort(priv->album_key_list, (GCompareFunc) _compare_album_keys); break; case SORT_DESCENDING: - priv->album_key_list = g_list_sort(priv->album_key_list, (GCompareFunc) _compare_album_item_keys); + priv->album_key_list = g_list_sort(priv->album_key_list, (GCompareFunc) _compare_album_keys); priv->album_key_list = g_list_reverse(priv->album_key_list); break; default: @@ -301,7 +314,7 @@ AlbumItem *album_model_get_item_with_track(AlbumModel *model, Track *track) { static gint _get_index(AlbumModelPrivate *priv, gchar *trk_key) { GList *key_list = priv->album_key_list; - GList *key = g_list_find_custom(key_list, trk_key, (GCompareFunc) _compare_album_item_keys); + GList *key = g_list_find_custom(key_list, trk_key, (GCompareFunc) _compare_album_keys); g_return_val_if_fail (key, -1); gint index = g_list_position(key_list, key); diff --git a/plugins/clarity/album_model.h b/plugins/clarity/album_model.h index 5ce900b..d91868d 100644 --- a/plugins/clarity/album_model.h +++ b/plugins/clarity/album_model.h @@ -109,5 +109,7 @@ gint album_model_get_index_with_track(AlbumModel *model, Track *track); gint album_model_get_size(AlbumModel *model); +gint compare_tracks(Track *a, Track *b); + #endif /* ALBUM_MODEL_H_ */ diff --git a/plugins/clarity/clarity_widget.c b/plugins/clarity/clarity_widget.c index ea96e8e..c549ccc 100644 --- a/plugins/clarity/clarity_widget.c +++ b/plugins/clarity/clarity_widget.c @@ -419,16 +419,36 @@ void clarity_widget_playlist_removed_cb(GtkPodApp *app, gpointer pl, gpointer da clarity_widget_clear(cw); } +GList *_sort_track_list(GList *tracks) { + enum GtkPodSortTypes value = prefs_get_int("clarity_sort"); + + switch(value) { + case SORT_ASCENDING: + tracks = g_list_sort(tracks, (GCompareFunc) compare_tracks); + break; + case SORT_DESCENDING: + tracks = g_list_sort(tracks, (GCompareFunc) compare_tracks); + tracks = g_list_reverse(tracks); + break; + default: + // Do Nothing + break; + } + + return tracks; +} + void clarity_widget_tracks_selected_cb(GtkPodApp *app, gpointer tks, gpointer data) { g_return_if_fail(CLARITY_IS_WIDGET(data)); ClarityWidget *cw = CLARITY_WIDGET(data); ClarityWidgetPrivate *priv = CLARITY_WIDGET_GET_PRIVATE(cw); - GList *tracks = tks; + GList *tracks = g_list_copy((GList *) tks); if (!tracks) return; + tracks = _sort_track_list(tracks); ClarityCanvas *ccanvas = CLARITY_CANVAS(priv->draw_area); if (clarity_canvas_is_loading(ccanvas)) ------------------------------------------------------------------------------ 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