814472876eac4d004d61f0ed89bd2aaa07459d33 max Thu Apr 9 06:42:24 2026 -0700 Fix composite vis: prefer pack over full, fix [-] button hide, refs #37182 Two issues from QA (note-17): 1) exposeAll() and onUserCbChange() always set composite to "full" when re-enabling subtracks on tracks without a "pack" option. Now tries pack first, then dense, then full as last resort. 2) The matrix [-] button (btn_minus_all_left_top) did not hide the composite. _matSetMatrixCheckBoxes() called hideAll() which triggered propagateVis, and propagateVis re-checked all subCBs when checkedCount===0, undoing the hide. Fix: set composite to hide directly via prop('selectedIndex', 0) without triggering propagateVis. Co-Authored-By: Claude Opus 4.6 (1M context) diff --git src/hg/js/subCfg.js src/hg/js/subCfg.js index e2ca2dd1025..4a845136f5b 100644 --- src/hg/js/subCfg.js +++ src/hg/js/subCfg.js @@ -60,33 +60,39 @@ } } } }, // Called only on real user clicks (bound via native addEventListener, not jQuery, // so jQuery .trigger('change') calls during init do not reach this). // Handles both subCB and matCB clicks. onUserCbChange: function () { var compEl = $("[name='"+subCfg.compositeName+"']"); if (compEl.length === 0) return; var anyChecked = $(".subCB:checked:visible").length > 0; - // if any subtracks are now checked and the composite is on hide, set it to pack - if (anyChecked && compEl.val() === "hide") + // if any subtracks are now checked and the composite is on hide, set it to pack (or dense) + if (anyChecked && compEl.val() === "hide") { + if (compEl.children('option[value="pack"]').length) compEl.val("pack").change(); + else if (compEl.children('option[value="dense"]').length) + compEl.val("dense").change(); + else + compEl.prop('selectedIndex', compEl.children('option').length - 1).change(); + } // if no subtracks are checked, set the composite to hide if (!anyChecked) compEl.val("hide"); }, clearChange: function (obj) { // Mark as unchanged $(obj).removeClass('changed'); // checkboxes have hidden boolshads which should be cleared in tandem if (obj.type === "checkbox") { var boolshad = normed($("input.cbShadow#boolshad\\."+obj.id)); if (boolshad) { $(boolshad).removeClass('changed');