b0ecd7c655f4682571f9b19301a4f1579225259d tdreszer Mon Dec 13 16:50:29 2010 -0800 Fix for after midnight release hold bug. This reintroduces lesser problem of finding and selecting both composite and child subtrack at the same time, but solves the major problem of not being able to set composite level visibility diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index bb9e009..a288fb6 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -4260,40 +4260,40 @@ makeItemsJsCommand(command, trackList, trackHash); else warn("Unrecognized jsCommand %s", command); } void parentChildCartCleanup(struct track *trackList,struct cart *newCart,struct hash *oldVars) /* When composite/view settings changes, remove subtrack specific vis When superTrackChild is found and selected, shape superTrack to match. */ { struct track *track = trackList; for (;track != NULL; track = track->next) { boolean shapedByubtrackOverride = FALSE; boolean cleanedByContainerSettings = FALSE; + // Top-down 'cleanup' MUST GO BEFORE bottom up reshaping. + cleanedByContainerSettings = cartTdbTreeCleanupOverrides(track->tdb,newCart,oldVars); + if (tdbIsContainer(track->tdb)) { shapedByubtrackOverride = cartTdbTreeReshapeIfNeeded(cart,track->tdb); if(shapedByubtrackOverride) track->visibility = tdbVisLimitedByAncestors(cart,track->tdb,TRUE,TRUE); } - // Top-down 'cleanup' can now follow reshaping because reshaping will flag itself for protection - cleanedByContainerSettings = cartTdbTreeCleanupOverrides(track->tdb,newCart,oldVars); - if ((shapedByubtrackOverride || cleanedByContainerSettings) && tdbIsSuperTrackChild(track->tdb)) // Either cleanup may require supertrack intervention { // Need to update track visibility // Unfortunately, since supertracks are not in trackList, this occurs on superChildren, // So now we need to find the supertrack and take changed cart values of its children struct slRef *childRef; for(childRef = track->tdb->parent->children;childRef != NULL;childRef = childRef->next) { struct trackDb * childTdb = childRef->val; struct track *child = hashFindVal(trackHash, childTdb->track); char *cartVis = cartOptionalString(cart,child->track); if (cartVis) child->visibility = hTvFromString(cartVis); } } }