Revision: 2265
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=2265&view=rev
Author:   jcsjcs
Date:     2009-02-28 13:19:48 +0000 (Sat, 28 Feb 2009)

Log Message:
-----------
        * src/display_coverart.c
          src/display_tracks.c
          src/display_sorttabs.c:
          Use g_list_prepend instead of g_list_append. Thanks to
          Javier Kohen for the patches.

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/src/display_coverart.c
    gtkpod/trunk/src/display_sorttabs.c
    gtkpod/trunk/src/display_tracks.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2009-02-28 10:41:03 UTC (rev 2264)
+++ gtkpod/trunk/ChangeLog      2009-02-28 13:19:48 UTC (rev 2265)
@@ -1,3 +1,11 @@
+2009-02-28 Jorg Schuler <jcsjcs at users.sourceforge.net>
+
+       * src/display_coverart.c
+         src/display_tracks.c
+         src/display_sorttabs.c:
+         Use g_list_prepend instead of g_list_append. Thanks to
+         Javier Kohen for the patches.
+
 2009-02-25 Jorg Schuler <jcsjcs at users.sourceforge.net>
 
        * src/display_tracks: streamline display functions. Thanks to

Modified: gtkpod/trunk/src/display_coverart.c
===================================================================
--- gtkpod/trunk/src/display_coverart.c 2009-02-28 10:41:03 UTC (rev 2264)
+++ gtkpod/trunk/src/display_coverart.c 2009-02-28 13:19:48 UTC (rev 2265)
@@ -630,7 +630,7 @@
  */
 void coverart_display_update (gboolean clear_track_list)
 {
-  gint i;
+  gint i, sort;
   GList *tracks;
   Track *track;
   Album_Item *album;
@@ -687,12 +687,12 @@
         album->albumname = g_strdup (track->album);
         album->artist = g_strdup (track->artist);
         album->tracks = NULL;
-        album->tracks = g_list_append (album->tracks, track);
+        album->tracks = g_list_prepend (album->tracks, track);
 
         /* Insert the new Album Item into the hash */
         g_hash_table_insert (album_hash, album_key, album);
         /* Add the key to the list for sorting and other functions */
-        album_key_list = g_list_append (album_key_list, album_key);
+        album_key_list = g_list_prepend (album_key_list, album_key);
       }
       else
       {
@@ -700,7 +700,7 @@
          * append the track to the end of the
          * track list */
         g_free (album_key);
-        album->tracks = g_list_append (album->tracks, track);
+        album->tracks = g_list_prepend (album->tracks, track);
       }
 
       tracks = tracks->next;
@@ -713,7 +713,16 @@
   album_key_list = g_list_remove_all (album_key_list, NULL);
 
   /* Sort the tracks to the order set in the preference */
-  coverart_sort_images (prefs_get_int("st_sort"));
+  sort = prefs_get_int("st_sort");
+  if (sort != SORT_NONE)
+  {
+      coverart_sort_images (sort);
+  }
+  else
+  {
+      /* restore original order) */
+      album_key_list = g_list_reverse (album_key_list);
+  }
 
   /* Add 4 null tracks to the end of the track list for padding */
   for (i = 0; i < IMG_MAIN; ++i)

Modified: gtkpod/trunk/src/display_sorttabs.c
===================================================================
--- gtkpod/trunk/src/display_sorttabs.c 2009-02-28 10:41:03 UTC (rev 2264)
+++ gtkpod/trunk/src/display_sorttabs.c 2009-02-28 13:19:48 UTC (rev 2265)
@@ -1691,8 +1691,6 @@
    @display: TRUE: add to track model (i.e. display it) */
 void st_add_track (Track *track, gboolean final, gboolean display, guint32 
inst)
 {
-  static gint count = 0;
-
 #if DEBUG_ADD_TRACK
   printf ("st_add_track: inst: %d, final: %d, display: %d, track: %p\n",
          inst, final, display, track);
@@ -1701,7 +1699,7 @@
   if (inst == prefs_get_int("sort_tab_num"))
   {  /* just add to track model */
       if ((track != NULL) && display)    tm_add_track_to_track_model (track, 
NULL);
-      if (final || (++count % 20 == 0))
+      if (final)
          gtkpod_tracks_statusbar_update();
   }
   else if (inst < prefs_get_int("sort_tab_num"))

Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c   2009-02-28 10:41:03 UTC (rev 2264)
+++ gtkpod/trunk/src/display_tracks.c   2009-02-28 13:19:48 UTC (rev 2265)
@@ -1600,6 +1600,8 @@
     return(result);
 }
 
+/* Prepends to list, so the list will be reversed. Make sure to
+   reverse the result if you care about the order of the tracks. */
 static void
 on_tracks_list_foreach ( GtkTreeModel *tm, GtkTreePath *tp,
                         GtkTreeIter *i, gpointer data)
@@ -1609,7 +1611,7 @@
     
     gtk_tree_model_get(tm, i, READOUT_COL, &tr, -1);
     g_return_if_fail (tr);
-    l = g_list_append(l, tr);
+    l = g_list_prepend(l, tr);
     *((GList**)data) = l;
 }
 
@@ -1626,6 +1628,7 @@
     {
        gtk_tree_selection_selected_foreach(ts, on_tracks_list_foreach,
                                            &result);
+       result = g_list_reverse(result);
     }
     return(result);
 }
@@ -1655,6 +1658,7 @@
 
     gtk_tree_model_foreach(model, on_all_tracks_list_foreach,
                           &result);
+    result = g_list_reverse(result);
     return result;
 }
 
@@ -1694,9 +1698,6 @@
   gint cmp = 0;
   ExtraTrackData *etr1, *etr2;
 
-
-  g_return_val_if_fail (track1 && track2, 0);
-
   /* string_compare_func is set to either compare_string_fuzzy or
      compare_string in tm_sort_column_changed() which is called
      once before the comparing begins. */
@@ -1868,16 +1869,6 @@
   case TM_NUM_COLUMNS:
       break;
   }
-
-  /* implement stable sorting: if two items are the same, revert to
-     the last relative positition */
-  if (cmp == 0)
-  {
-      etr1 = track1->userdata;
-      etr2 = track2->userdata;
-      g_return_val_if_fail (etr1 && etr2, 0);
-      cmp = etr1->sortindex - etr2->sortindex;
-  }
   return cmp;
 }
 
@@ -1965,13 +1956,24 @@
   GtkSortType order;
   gint result;
 
-  gtk_tree_model_get (model, a, READOUT_COL, &track1, -1);
-  gtk_tree_model_get (model, b, READOUT_COL, &track2, -1);
   if(gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model),
                                           &column, &order) == FALSE)
       return 0;
 
+  gtk_tree_model_get (model, a, READOUT_COL, &track1, -1);
+  gtk_tree_model_get (model, b, READOUT_COL, &track2, -1);
+  g_return_val_if_fail (track1 && track2, 0);
+
   result = tm_data_compare (track1, track2, column);
+  /* implement stable sorting: if two items are the same, revert to
+     the last relative positition */
+  if (result == 0)
+  {
+      ExtraTrackData *etr1 = track1->userdata;
+      ExtraTrackData *etr2 = track2->userdata;
+      g_return_val_if_fail (etr1 && etr2, 0);
+      result = etr1->sortindex - etr2->sortindex;
+  }
   return result;
 }
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to