4f5daba5965f89083c356897ef285b0477c59db6
braney
  Wed Aug 19 15:23:54 2015 -0700
another round of trying to get visibilities in the cart to work right

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 54902ca..0975c35 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -3955,48 +3955,49 @@
     defaultsSet = TRUE;
     struct group *group;
     struct trackRef *tr;
     for (group = groupList; group != NULL; group = group->next)
         for (tr = group->trackList; tr != NULL; tr = tr->next)
             {
             struct track *track = tr->track;
             track->visibility = tvHide;
             }
     }
 else
     {
     // we're going to set all the trackDb default visibilities on in the cart
     void pruneRedundantCartVis(struct track *trackList);
     pruneRedundantCartVis(trackList);
+    if (vis == -1)  // we're restoring to defaults
+        changeTrackVis(groupList, NULL, vis);
     cartSetString(cart, CART_HAS_DEFAULT_VISIBILITY, "on");
     }
 
 /* Get visibility values if any from ui. */
 for (track = trackList; track != NULL; track = track->next)
     {
     // if the defaults aren't set in the cart and this track isn't hidden, set its visibility in the cart
     char *s = cartOptionalString(cart, track->track);
     if (!defaultsSet && (track->tdb->visibility != tvHide) && (s == NULL))
         {
 	struct trackDb *parent = track->tdb->parent;
         if (parent) 
             {
             char *super = cartOptionalString(cart, parent->track);
-            if (super == NULL)
-                cartSetString(cart, parent->track, !parent->isShow ?  "hide" : "show");
+            if ((super == NULL) && parent->isShow)
+                cartSetString(cart, parent->track, "show");
             }
-	if (!parent || parent->isShow)
         cartSetString(cart, track->track, hStringFromTv(track->tdb->visibility));
         }
 
     if (cgiOptionalString("hideTracks"))
 	{
 	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)
@@ -4498,35 +4499,32 @@
 
 // honor defaultImgOrder
 if (cgiVarExists("hgt.defaultImgOrder"))
     {
     char wildCard[32];
     safef(wildCard,sizeof(wildCard),"*_%s",IMG_ORDER_VAR);
     cartRemoveLike(cart, wildCard);
     }
 // Subtrack settings must be removed when composite/view settings are updated
 parentChildCartCleanup(trackList,cart,oldVars);
 if (measureTiming)
     measureTime("parentChildCartCleanup");
 
 
 /* Honor hideAll variable */
-if (hideAll || defaultTracks)
-    {
-    int vis = (hideAll ? tvHide : -1);
-    changeTrackVis(groupList, NULL, vis);
-    }
+if (hideAll)
+    changeTrackVis(groupList, NULL, tvHide);
 
 /* Before loading items, deal with the next/prev item arrow buttons if pressed. */
 if (cgiVarExists("hgt.nextItem"))
     doNextPrevItem(TRUE, cgiUsualString("hgt.nextItem", NULL));
 else if (cgiVarExists("hgt.prevItem"))
     doNextPrevItem(FALSE, cgiUsualString("hgt.prevItem", NULL));
 
 if(!psOutput && !cartUsualBoolean(cart, "hgt.imageV1", FALSE))
     {
     // Start an imagebox (global for now to avoid huge rewrite of hgTracks)
     // Set up imgBox dimensions
     int sideSliceWidth  = 0;   // Just being explicit
     if (withLeftLabels)
         sideSliceWidth   = (insideX - gfxBorder*3) + 2;
     theImgBox = imgBoxStart(database,chromName,winStart,winEnd,