gui/view: Sort the user playlists menu

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-08-18 08:50:24 -04:00
parent ddb564ed82
commit f02dff4177
1 changed files with 18 additions and 2 deletions

View File

@ -325,21 +325,37 @@ static void __view_rc_add_other(GtkWidget *item, gpointer data)
&vad_data);
}
static gint __view_cmp_pl(gconstpointer a, gconstpointer b)
{
struct playlist *pl_a = (struct playlist *)a;
struct playlist *pl_b = (struct playlist *)b;
return g_utf8_collate(pl_a->pl_name, pl_b->pl_name);
}
static GtkWidget *__view_rc_build_submenu(void)
{
struct db_entry *dbe, *next;
struct playlist *playlist;
GtkWidget *submenu, *item;
GList *iter, *list = NULL;
if (pl_user_db_get()->db_size == 0)
return NULL;
submenu = gtk_menu_new();
db_for_each(dbe, next, pl_user_db_get()) {
playlist = &USER_PLAYLIST(dbe)->pl_playlist;
list = g_list_insert_sorted(list, playlist, __view_cmp_pl);
}
submenu = gtk_menu_new();
iter = g_list_first(list);
while (iter) {
playlist = (struct playlist *)iter->data;
item = gtk_menu_item_new_with_label(playlist->pl_name);
gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item);
g_signal_connect(item, "activate", G_CALLBACK(__view_rc_add_other), playlist);
g_signal_connect(item, "activate",
G_CALLBACK(__view_rc_add_other), playlist);
iter = g_list_next(iter);
}
return submenu;