Skip to content

v20260814-nightly

@gnachman gnachman tagged this 13 Aug 22:21
Correctness fixes from the origin/master...HEAD review:
- Capture the color picker's target (tab vs group) when the
  picker opens, fixing an MRC use-after-free of
  _tabGroupIDForColorPicker and a stale panel silently
  retargeting a group.
- Keep a group's last member in its group on a no-move drop
  (its own gid-carrying slot now reports the group), and fire
  didDrop only when position or membership actually changes.
- Skip chip cells in the overflow menu (a chip became a blank
  item selecting a nil tab), lastVisibleTab,
  numberOfVisibleTabs, and the accessibility tab lists.
- Honor fit-to-content widths when a group exists instead of
  snapping every tab to uniform widths.
- Gate the scrollable-bar trailing clip outset on chips being
  present so groupless bars keep the exact viewport clip.
- Enforce pinned-prefix and group-contiguity invariants
  through one canonical order (iTermTabGroupOrdering) used by
  applyTabOrder: and the reorder repair: pinning a tab is no
  longer undone, group drops clamp to the pinned zone, and a
  wrapped Move Tab Left/Right clamps instead of no-opping.
- Stop cloning group identity across windows: a single member
  moved or dropped elsewhere ungroups (only whole-group chip
  drags and tear-offs carry the group).
- Report an honest create-tab API status when tab_index is
  refused or clamped.
- Fix the duplicate join slot at a group's trailing edge and
  the NSNotFound drop anchor snapping a dropped group to the
  front of the bar.
- Push group membership to cells by tab view item, not by
  position; mid-drag the dragged tab's cell is absent, which
  shifted every later tab's group id (a one-tab group vanished
  into its neighbor while dragging).
- Use the live mouse location in the tab bar's drag handlers;
  AppKit's throttled draggingLocation interleaves stale points
  and flapped the drop target.

Drop feedback while dragging into another window's bar:
- Run the drag animation timer in the tracking run-loop mode;
  it starved during a live drag and slots never opened.
- Distribute drop slots on entry keyed on drag participation
  so a stale placeholder cannot suppress setup.
- Shrink a full (stretch-to-fit) bar's tabs from snapshotted
  base widths so the slot carves a visible gap.
- Auto-scroll a scrollable bar, both directions, to reveal
  the targeted slot.
- Size the slot to the dragged unit's on-drop extent in the
  destination, not its size in the source bar.
- Keep the group outline around the dragged member's own slot
  so it shrinks with the slot instead of snapping down.

Policy: dragging a one-tab group's last tab out dissolves the
group; in-place drops and chip drags keep it.

Architecture and cleanup: drop context now flows through
tabView:didDropTabViewItem:inTabBar:joiningGroupWithID:
(droppedInsideGroupID side channel removed); one shared run
enumerator feeds both styles' group decorations; deleted the
dead PSMTabGroupChipView instance side, unused drag helpers,
and an uncalled getter; consolidated the duplicated luma math
in NSColor+PSM; cached chip text measurements; batched the
membership push to one normalize per update; resolved
terminalForTabBar: via the delegate; gated expensive RLog
dumps; added always-on drag telemetry (animTick, calc,
dragScroll) for field debugging; release notes.

New tests: PSMTabGroupEnumeratorTests,
PSMTabGroupDropResolutionTests, iTermTabGroupOrderingTests,
plus live drag coverage in PSMTabGroupDragTests (timer mode,
slot sizing, squeeze, auto-scroll, stale-slot entry).
Assets 2
Loading