cbf4bf3cac2bf99f8dbe8645a74d6a4bc61559fa
jcasper
  Thu Jul 23 12:56:07 2026 -0700
Ensuring that multiwig children of composites can be configured via right-click in hgTracks, refs #36320

diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js
index 705dc22bba6..a3db619f33a 100644
--- src/hg/js/hgTracks.js
+++ src/hg/js/hgTracks.js
@@ -3621,40 +3621,51 @@
 
             var itemToRemove = rightClick.itemFromHref(rightClick.selectedMenuItem.href);
             if (itemToRemove)
                 rightClick.removeItemColor(itemToRemove.track, itemToRemove.name);
 
         } else if (cmd === 'clearItemColors') {
 
             rightClick.clearItemColors();
 
         } else if (cmd === 'hgTrackUi_follow') {
 
             url = "hgTrackUi?hgsid=" + getHgsid() + "&g=";
             rec = hgTracks.trackDb[id];
             if (tdbHasParent(rec) && tdbIsLeaf(rec))
                 url += rec.parentTrack;
+            else if (tdbHasParent(rec) && tdbIsContainer(rec))
+                // A container (e.g. multiWig) nested in a composite configures itself,
+                // not its parent (whose link is on the shared row button).
+                url += id;
             else {
                 // The button already has the ref
                 var link = normed($( 'td#td_btn_'+ rightClick.selectedMenuItem.id ).children('a'));
                 if (link)
                     url = $(link).attr('href');
                 else
                     url += rightClick.selectedMenuItem.id;
             }
             location.assign(url);
 
+        } else if (cmd === 'hgTrackUi_followParent') {
+
+            // Configure the parent container (e.g. the composite) of a nested container track.
+            rec = hgTracks.trackDb[id];
+            url = "hgTrackUi?hgsid=" + getHgsid() + "&g=" + rec.parentTrack;
+            location.assign(url);
+
         } else if (cmd === 'newCollection') {
             $.ajax({
                 type: "PUT",
                 async: false,
                 url: "../cgi-bin/hgCollection",
                 data:  "cmd=newCollection&track=" + id + "&hgsid=" + getHgsid(),
                 trueSuccess: mySuccess,
                 success: catchErrorOrDispatch,
                 error: errorHandler,
             });
 
             imageV2.fullReload();
         } else if (cmd === 'addCollection') {
             var shortLabel = $(menuItemClicked).text().substring(9).slice(0,-1); 
             var ii;
@@ -4630,30 +4641,40 @@
                         o[rightClick.makeImgTag("folderWrench.png")+" Configure "+
                           rec.parentLabel + " track set..."] = {
                             onclick: function(menuItemClicked, menuObject) {
                                 rightClick.hit(menuItemClicked,menuObject,"hgTrackUi_follow");
                                 return true; }
                           };
                     }
                 } else {
 
                     o[rightClick.makeImgTag("folderWrench.png")+" Configure "+rec.shortLabel +
                       " track set..."] = {
                         onclick: function(menuItemClicked, menuObject) {
                             rightClick.hit(menuItemClicked, menuObject, "hgTrackUi_follow");
                             return true; }
                       };
+                    if (rec.parentTrack) {
+                        // A container (e.g. multiWig) nested in a composite: also offer
+                        // the parent composite's configuration.
+                        o[rightClick.makeImgTag("folderWrench.png")+" Configure "+
+                          rec.parentLabel + " track set..."] = {
+                            onclick: function(menuItemClicked, menuObject) {
+                                rightClick.hit(menuItemClicked,menuObject,"hgTrackUi_followParent");
+                                return true; }
+                          };
+                    }
                 }
                 if (jQuery.floatMgr) {
                     o[(rightClick.selectedMenuItem.id === rightClick.floatingMenuItem ?
                             selectedImg : blankImg) + " float"] = {
                         onclick: function(menuItemClicked, menuObject) {
                             rightClick.hit(menuItemClicked, menuObject, "float");
                             return true; }
                     };
                 }
                 // add a toggle to hide/show the merged item(s)
                 mergeTrack = rightClick.selectedMenuItem.id + ".doMergeItems";
                 if (rec.hasOwnProperty(mergeTrack)) {
                     var hasMergedItems = rec[mergeTrack] === 1;
                     titleStr = rightClick.makeImgTag("wrench.png") + " ";
                     if (hasMergedItems) {