From: phantomjinx <pha...@us...> - 2012-05-09 21:30:40
|
commit acb4ca013d66069b53e4bac86c52e2d5480417e7 Author: phantomjinx <p.g...@ph...> Date: Wed May 9 22:29:04 2012 +0100 Improve performance of playlist selection * For playlists / ipods with many tracks, playlist selection can be very slow. Turns out this is due to excessive track display signals being fired while tracks are added. * Use gtk_list_store_insert_with_values since this triggers fewer signals than the gtk_list_store_append/gtk_list_store_set couplet * Turn off sorting then turn back on afterwards since sorting makes adding very slow! plugins/track_display/display_tracks.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) --- diff --git a/plugins/track_display/display_tracks.c b/plugins/track_display/display_tracks.c index da57139..f98f723 100644 --- a/plugins/track_display/display_tracks.c +++ b/plugins/track_display/display_tracks.c @@ -2376,15 +2376,28 @@ gboolean tm_add_filelist(gchar *data, GtkTreePath *path, GtkTreeViewDropPosition void track_display_set_tracks_cb(GtkPodApp *app, gpointer tks, gpointer data) { GList *tracks = tks; + GtkTreeModel *model = NULL; + tm_remove_all_tracks(); + // Unsort the track view to improve performance + model = gtk_tree_view_get_model(track_treeview); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); + while (tracks != NULL) { /* add all tracks to model */ Track *track = tracks->data; - tm_add_track_to_track_model(track, NULL); + gtk_list_store_insert_with_values (get_model_as_store(model), NULL, -1, READOUT_COL, track, -1); tracks = tracks->next; } + if (model) { + int column = prefs_get_int("tm_sortcol"); + int order = prefs_get_int("tm_sort"); + if (order != SORT_NONE) { + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (model), column, order); + } + } } void track_display_set_playlist_cb(GtkPodApp *app, gpointer pl, gpointer data) { |