ad9d7082c4e74d57f07a8bf5170fead4aad8a81f
braney
  Fri Jan 6 11:16:53 2017 -0800
fix a problem with visibility of composites #18544

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 434be29..12711d2 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -6544,62 +6544,72 @@
 if (cartOptionalString(cart, "hgt.trackNameFilter") == NULL)
     { // If a single track was asked for and it is from a hub, then it is already in trackList
     loadTrackHubs(&trackList, &grpList);
     }
 loadCustomTracks(&trackList);
 groupTracks( &trackList, pGroupList, grpList, vis);
 setSearchedTrackToPackOrFull(trackList);
 if (cgiOptionalString( "hideTracks"))
     changeTrackVis(groupList, NULL, tvHide);
 
 /* Get visibility values if any from ui. */
 for (track = trackList; track != NULL; track = track->next)
     {
     char *s = cartOptionalString(cart, track->track);
     if (startsWith("hub_", track->track) && (s == NULL))
+        {
         s = cartOptionalString(cart, trackHubSkipHubName(track->track));
+        // if we got a generic visibility setting that applies to a hub,
+        // go ahead and set the hub specific visibility for future cart
+        // accesses
+        if (s != NULL)
+            cartSetString(cart, track->track, s);
+        }
     if (cgiOptionalString("hideTracks"))
 	{
         if (tdbIsSuperTrackChild(track->tdb))
             {
             s = cgiOptionalString(track->tdb->parent->track);
             if (s)
                 {
                 cartSetString(cart, track->tdb->parent->track, s);
                 track->tdb->parent->visibility = hTvFromString(s) ;
                 }
             }
 	s = cgiOptionalString(track->track);
 	if (s != NULL)
 	    {
 	    if (hTvFromString(s) == track->tdb->visibility)
 		cartRemove(cart, track->track);
 	    else
 		cartSetString(cart, track->track, s);
 	    }
 	}
     if (s != NULL && !track->limitedVisSet)
 	track->visibility = hTvFromString(s);
     if (tdbIsCompositeChild(track->tdb))
         track->visibility = tdbVisLimitedByAncestry(cart, track->tdb, FALSE);
     else if (tdbIsComposite(track->tdb) && track->visibility != tvHide)
 	{
 	struct trackDb *parent = track->tdb->parent;
 	char *parentShow = NULL;
 	if (parent)
+            {
+            fprintf(stderr,"checking composite %s\n", parent->track);
 	    parentShow = cartUsualString(cart, parent->track,
 			 parent->isShow ? "show" : "hide");
+            }
 	if (!parent || sameString(parentShow, "show"))
 	    compositeTrackVis(track);
 	}
     }
 return trackList;
 }
 
 char *collapseGroupVar(char *name)
 /* Construct cart variable name for collapsing group */
 {
 static char varName[256];
 safef(varName, sizeof(varName),
         "%s%s_%s_%s", "hgt", "group", name, "close");
 return (cloneString(varName));
 }