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