15ba3603d692aa12c02d7d2f5979091c25b05d5f braney Thu Jul 23 11:22:47 2026 -0700 hgTracks quickLift: show quickLifted superTrack child on first target load, refs #37535 When Convert/QuickLift lands on the target with hideTracks=on, the visibility of a quickLifted superTrack's parent was resolved from cgiOptionalString (URL params only), so the source assembly's carried-over "mavedb show" cart var was neither honored nor migrated to the hub-decorated name (hub__mavedb). The superTrack stayed hidden on the first load, so its heatmap child (e.g. mavedb_maps) drew no row until a reload; top-level quickLifted tracks (e.g. mane) were unaffected. QuickLifted tracks are exempt from hideTracks, so read the parent superTrack's visibility from the cart (and migrate the undecorated name) even under hideTracks. Non-quickLift paths are unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 3ce6f9ba3be..50f465319d3 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -7611,40 +7611,45 @@ { char *s = cartOptionalString(cart, "knownGene"); if ((s != NULL) && (differentString(s, "hide"))) cartSetString(cart, defaultGeneTrack, s); } for (track = trackList; track != NULL; track = track->next) { // deal with any supertracks we're seeing for the first time if (tdbIsSuperTrackChild(track->tdb)) { struct hashEl *hel = NULL; if ((hel = hashLookup(superTrackHash, track->tdb->parent->track)) == NULL) // we haven't seen this guy { + // QuickLifted tracks are exempt from hideTracks -- their visibility is + // carried over from the source assembly's cart (and may still be under the + // undecorated name until migrated below), so consult the cart, not the URL. + boolean superFromCart = !hideTracks || + (trackDbSetting(track->tdb, "quickLiftUrl") != NULL); // first deal with visibility of super track - char *s = hideTracks ? cgiOptionalString(track->tdb->parent->track) : cartOptionalString(cart, track->tdb->parent->track); + char *s = superFromCart ? cartOptionalString(cart, track->tdb->parent->track) : cgiOptionalString(track->tdb->parent->track); if (s) { track->tdb->parent->visibility = hTvFromString(s) ; cartSetString(cart, track->tdb->parent->track, s); } else if (startsWith("hub_", track->tdb->parent->track)) { - s = hideTracks ? cgiOptionalString( trackHubSkipHubName(track->tdb->parent->track)) : cartOptionalString( cart, trackHubSkipHubName(track->tdb->parent->track)); + s = superFromCart ? cartOptionalString( cart, trackHubSkipHubName(track->tdb->parent->track)) : cgiOptionalString( trackHubSkipHubName(track->tdb->parent->track)); if (s) { cartSetString(cart, track->tdb->parent->track, s); cartRemove(cart, trackHubSkipHubName(track->tdb->parent->track)); // remove the undecorated version track->tdb->parent->visibility = hTvFromString(s) ; } } // now look to see if we have a _hideKids statement to turn off all subtracks (including the current one) unsigned hideKids = 0; char *usedThis = buffer; safef(buffer, sizeof buffer, "%s_hideKids", track->tdb->parent->track); s = cartOptionalString(cart, buffer); if (s == NULL && startsWith("hub_", track->tdb->parent->track))