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) {
|