diff --git a/gui/view.c b/gui/view.c index 6d1a96f6..c7c9ddfb 100644 --- a/gui/view.c +++ b/gui/view.c @@ -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;