9e321f616be71802026539876ec19d91986eeae4 tdreszer Mon Nov 15 15:48:22 2010 -0800 Simultaneous reshaping and composite cleanup no longer conflict if reshaping goes first. diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 88c4493..5077694 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -2111,31 +2111,30 @@ for (flatTrack = flatTracks; flatTrack != NULL; flatTrack = flatTrack->next) { track = flatTrack->track; if (track->limitedVis != tvHide) { #ifdef SUBTRACKS_HAVE_VIS if(track->labelColor == track->ixColor && track->ixColor == 0) track->ixColor = hvGfxFindRgb(hvg, &track->color); #endif//def SUBTRACKS_HAVE_VIS int order = flatTrack->order; curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isCenterLabelIncluded(track),order); } } } - /* Draw mini-buttons. */ if (withLeftLabels && psOutput == NULL) { int butOff; boolean grayButtonGroup = FALSE; struct group *lastGroup = NULL; y = gfxBorder; if (rulerMode != tvHide) { /* draw button for Base Position pseudo-track */ int height = basePositionHeight; if (rulerCds) height += rulerTranslationHeight; if(theImgBox) { @@ -4230,40 +4229,40 @@ else warn("Unrecognized jsCommand %s", command); } #ifdef SUBTRACKS_HAVE_VIS 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' (CleanupOverrides) must be before bottom-up 'Reshaping' (MatchSubtrackVis) - cleanedByContainerSettings = cartTdbTreeCleanupOverrides(track->tdb,newCart,oldVars); - if (tdbIsContainer(track->tdb)) { shapedByubtrackOverride = cartTdbTreeMatchSubtrackVis(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); } } }