chiark / gitweb /
Preserve playlist selection when list changes
authorRichard Kettlewell <rjk@greenend.org.uk>
Mon, 23 Nov 2009 09:40:20 +0000 (09:40 +0000)
committerRichard Kettlewell <rjk@greenend.org.uk>
Mon, 23 Nov 2009 09:40:20 +0000 (09:40 +0000)
disobedience/playlists.c

index 4aacfb9a9acc122eb8eb53e046bd4cfcc430533c..31576ad3fc1f815a72adf22989a01fcb99f7ad0d 100644 (file)
@@ -456,15 +456,20 @@ static void playlists_fill(const char attribute((unused)) *event,
                            void attribute((unused)) *callbackdata) {
   GtkTreeIter iter[1];
 
                            void attribute((unused)) *callbackdata) {
   GtkTreeIter iter[1];
 
+  if(!playlists_window)
+    return;
   if(!playlists_list)
     playlists_list = gtk_list_store_new(1, G_TYPE_STRING);
   if(!playlists_list)
     playlists_list = gtk_list_store_new(1, G_TYPE_STRING);
-  gtk_list_store_clear(playlists_list);
-  for(int n = 0; n < nplaylists; ++n)
+  const char *was_selected = playlists_selected;
+  gtk_list_store_clear(playlists_list); /* clears playlists_selected */
+  for(int n = 0; n < nplaylists; ++n) {
     gtk_list_store_insert_with_values(playlists_list, iter, n/*position*/,
                                       0, playlists[n],        /* column 0 */
                                       -1);                    /* no more cols */
     gtk_list_store_insert_with_values(playlists_list, iter, n/*position*/,
                                       0, playlists[n],        /* column 0 */
                                       -1);                    /* no more cols */
-  // TODO reselect whatever was formerly selected if possible, if not then
-  // zap the contents view
+    /* Reselect the selected playlist */
+    if(was_selected && !strcmp(was_selected, playlists[n]))
+      gtk_tree_selection_select_iter(playlists_selection, iter);
+  }
 }
 
 /** @brief Called when the selection might have changed */
 }
 
 /** @brief Called when the selection might have changed */