f04f1b9af06c823602c5e0ecd3b8c2059d7704d3
jcasper
  Thu Aug 27 14:42:31 2026 -0700
Faceted composites now have a max display mode setting instead of a full override
of child track visibilities, with accompanying support for the onlyVisibility setting.  We also
now include a filter block (applied to appropriate child tracks) when those settings are in place.
refs #37662

diff --git src/hg/inc/trackDb.h src/hg/inc/trackDb.h
index 408f5360c82..26a54602f4a 100644
--- src/hg/inc/trackDb.h
+++ src/hg/inc/trackDb.h
@@ -211,30 +211,34 @@
 // Is this trackDb struct marked as a child of a composite track ?
 {
 return tdb && tdb->parent && COMPOSITE_CHILD_NODE(tdb->treeNodeType);
 }
 #define tdbIsCompositeSubtrack(tdb) tdbIsCompositeChild(tdb)
 
 INLINE struct trackDb *tdbGetComposite(struct trackDb *tdb)
 // Return closest ancestor who is a composite track.
 {
 struct trackDb *parent = tdb->parent;
 for ( ; parent != NULL && !tdbIsComposite(parent); parent = parent->parent)
     ;
 return parent;
 }
 
+boolean tdbIsFacetedComposite(struct trackDb *tdb);
+// Is this a composite whose children are picked from a metadata table rather than a
+// subgroup matrix?  Unlike other composites, a faceted composite's own visibility is a
+// maximum for its children rather than a value they inherit.
 
 // --- MultiTracks are container tracks with one level of subtracks
  //                combined into a unified hgTracks image track
 INLINE void tdbMarkAsMultiTrack( struct trackDb *tdb)
 // Marks a trackDb struct as a multiTrack (like multiWig)
 {
 tdb->treeNodeType |= MULTI_TRACK_MASK;
 }
 
 INLINE void tdbMarkAsMultiTrackChild( struct trackDb *tdb)
 // Marks a trackDb struct as a child of a multiTrack (like multiWig)
 {
 tdb->treeNodeType |= MULTI_TRACK_CHILD_MASK;
 }
 #define tdbMarkAsMultiTrackSubtrack(tdb) tdbMarkAsMultiTrackChild(tdb)