eebf4b02733405eb7298116109724493fe21d444
tdreszer
  Wed Oct 5 16:57:07 2011 -0700
Make imgOrd based sort more deterministic.  For redmine 5565.
diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c
index 6400df8..d78f0ce 100644
--- src/hg/hgTracks/imageV2.c
+++ src/hg/hgTracks/imageV2.c
@@ -55,30 +55,32 @@
     if (track->customTrack)
         flatTrack->order = ++topOrder; // Custom tracks go to top
     else
 #endif///def IMGORD_CUSTOM_ONTOP
         flatTrack->order = ++lastOrder;
     }
 
 slAddHead(flatTracks,flatTrack);
 }
 
 int flatTracksCmp(const void *va, const void *vb)
 // Compare to sort on flatTrack->order
 {
 const struct flatTracks *a = *((struct flatTracks **)va);
 const struct flatTracks *b = *((struct flatTracks **)vb);
+if (a->order == b->order)
+    return tgCmpPriority(a->track,b->track);
 return (a->order - b->order);
 }
 
 #ifdef IMGORD_CUSTOM_ONTOP
 void flatTracksSort(struct flatTracks **flatTracks)
 // This routine sorts the imgTracks then forces tight ordering, so new tracks wil go to the end
 {
 // flatTracks list has 2 sets of "order": those already dragReordered (below IMG_ORDERTOP)
 // and those not yet reordered (above).  Within those not yet dragReordered are 2 sets:
 // Those that begin numbering at IMG_ORDERTOP and those that begin at IMG_ORDEREND.
 // This routine must determine if there are any already dragOrdered, and if so, position the
 // newcomers in place.  Newly appearing customTracks will appear at top, while newly appearing
 // standard tracks appear at the end of the image.
 int haveBeenOrderd = 0, imgOrdHighest=0; // Keep track of reordered count and position
 int notYetOrdered = 0, toBeTopHighest=0; // Keep track of those to be reordered, and top ordered