3c460f56a582ae4fe383b219f7d0715c7f0092f3
kent
  Sun Jan 9 10:55:01 2011 -0800
Fixing subtrack sorting problem in composite tracks in track hub.
diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 00349a9..554e691 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -100,39 +100,53 @@
 boolean hgDebug = FALSE;      /* Activate debugging code. Set to true by hgDebug=on in command line*/
 int imagePixelHeight = 0;
 boolean dragZooming = TRUE;
 struct hash *oldVars = NULL;
 
 boolean hideControls = FALSE;		/* Hide all controls? */
 boolean trackImgOnly = FALSE;           /* caller wants just the track image and track table html */
 boolean ideogramToo =  FALSE;           /* caller wants the ideoGram (when requesting just one track) */
 
 /* Structure returned from findGenomePos.
  * We use this to to expand any tracks to full
  * that were found to contain the searched-upon
  * position string */
 struct hgPositions *hgp = NULL;
 
-
 /* Other global variables. */
 struct trackHub *hubList = NULL;	/* List of all relevant hubs. */
 struct group *groupList = NULL;    /* List of all tracks. */
 char *browserName;              /* Test or public browser */
 char *organization;             /* UCSC */
 
 struct hash *trackHash = NULL; /* Hash of the tracks by their name. */
 
+void uglySnoopTrackList(int depth, struct track *trackList)
+/* Print out some info on track list. */
+{
+struct track *track;
+for (track = trackList; track != NULL; track = track->next)
+    {
+    if (stringIn("FaireH1h", track->track))
+	{
+	repeatCharOut(uglyOut, '+', depth);
+        uglyf("%s pri=%g defPri=%g<BR>\n", track->track, track->priority, track->defaultPriority);
+	}
+    uglySnoopTrackList(depth+1, track->subtracks);
+    }
+}
+
 struct track *trackFindByName(struct track *tracks, char *trackName)
 /* find a track in tracks by name, recursively searching subtracks */
 {
 struct track *track;
 for (track = tracks; track != NULL; track = track->next)
     {
     if (sameString(track->track, trackName))
         return track;
     else if (track->subtracks != NULL)
         {
         struct track *st = trackFindByName(track->subtracks, trackName);
         if (st != NULL)
             return st;
         }
     }
@@ -3296,32 +3310,33 @@
 static void addTracksFromTrackHub(int id, char *hubUrl, struct track **pTrackList,
 	struct trackHub **pHubList)
 /* Load up stuff from data hub and append to list. The hubUrl points to
  * a trackDb.ra format file.  */
 {
 /* Load trackDb.ra file and make it into proper trackDb tree */
 char hubName[8];
 safef(hubName, sizeof(hubName), "%d",id);
 struct trackHub *hub = trackHubOpen(hubUrl, hubName);
 if (hub != NULL)
     {
     struct trackHubGenome *hubGenome = trackHubFindGenome(hub, database);
     if (hubGenome != NULL)
 	{
 	struct trackDb *tdbList = trackHubTracksForGenome(hub, hubGenome);
-	trackDbLinkUpGenerations(tdbList);
+	tdbList = trackDbLinkUpGenerations(tdbList);
 	tdbList = trackDbPolishAfterLinkup(tdbList, database);
+	trackDbPrioritizeContainerItems(tdbList);
 	addTdbListToTrackList(tdbList, NULL, pTrackList);
 	if (tdbList != NULL)
 	    slAddHead(pHubList, hub);
 	}
     }
 }
 
 void loadTrackHubs(struct track **pTrackList, struct trackHub **pHubList)
 /* Load up stuff from data hubs and append to lists. */
 {
 struct hubConnectStatus *hub, *hubList =  hubConnectStatusFromCart(cart);
 for (hub = hubList; hub != NULL; hub = hub->next)
     {
     addTracksFromTrackHub(hub->id, hub->hubUrl, pTrackList, pHubList);
     }