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