b8a81ed72bfd0502d0fd0cb4ed26517953ad032a braney Thu Feb 28 15:05:46 2019 -0800 if being called through AJAX to draw a single track, make sure to load any composite parents as well. #23027 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index fa2f566..275ab9c 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -5770,31 +5770,44 @@ else if (track->drawItems == NULL) warn("No draw handler for %s", tdb->track); else slAddHead(pTrackList, track); } } void loadFromTrackDb(struct track **pTrackList) /* Load tracks from database, consulting handler list. */ { char *trackNameFilter = cartOptionalString(cart, "hgt.trackNameFilter"); struct trackDb *tdbList; if(trackNameFilter == NULL) tdbList = hTrackDb(database); else + { tdbList = hTrackDbForTrack(database, trackNameFilter); + + if (tdbList->parent) // we want to give the composite parent a chance to load and set options + { + while(tdbList->parent) + { + if (tdbList->parent->subtracks == NULL) // we don't want to go up to a supertrack + break; + tdbList = tdbList->parent; + } + trackNameFilter = tdbList->track; + } + } addTdbListToTrackList(tdbList, trackNameFilter, pTrackList); } static int getScoreFilter(char *trackName) /* check for score filter configuration setting */ { char optionScoreStr[256]; safef(optionScoreStr, sizeof(optionScoreStr), "%s.scoreFilter", trackName); return cartUsualInt(cart, optionScoreStr, 0); } void ctLoadSimpleBed(struct track *tg) /* Load the items in one custom track - just move beds in * window... */