Tab bar: a dragged tab settles into its slot (classic motion pass)
Merged
TE
5d ago+1+1+0123456789-1-1-0123456789
Summary
A tab reordered by drag in classic's tab bar now settles into its slot. Before, the drag image vanished under the pointer and the tab appeared in its new slot at once.
This bumps vendor/bonsplit to classic/tab-drop-settle-2 (e0db551): main's current pin (bc0d6dd, #19672) plus manaflow-ai/bonsplit#282 and nothing else. The first version of this PR pinned 2e21c479 plus #282; main moved the pin since, so the branch was rebuilt on the new one. Bonsplit main also carries #272/#273 (the action-button menus); this PR doesn't ship them.
- AppKit slides the drag image into the slot where the pane placed the tab, pinned tabs first. The real tab draws nothing there until the drag ends (at most 0.5 s), so it never shows twice.
- The drop stays instant under Reduce Motion, for tabs from another pane, for file drops, and for slots not fully on screen.
- Only the tab row moves. Unsplit and zoom stay instant in classic: its split animator has been off since #12, and animating those would reflow terminals every frame.
Testing
TabDropSettleTestsin Bonsplit, red then green on manaflow-ai/bonsplit#282. Red on 85a5b5f: the drop landed but didn't slide. Green on 4df2b47. Full Bonsplit suite: 275 tests, 0 failures.python3 scripts/verify-local.py --affected origin/main: 16/16 passed.- PR CI macOS compile and Swift package tests run on this head.
- After the rebuild on bc0d6dd (which changed pane hosting in the same controller), the Bonsplit suite reruns on the fleet.
- Not yet seen on screen: whether AppKit ends the drag only after the slide. If it ends sooner, the tab shows slightly early; it can't stay hidden past 0.5 s. Classic has no frame recorder.
Changelog
- Changed: A tab dragged to a new place in the tab bar slides into its slot instead of jumping there.
🤖 Generated with Claude Code
Summary by CodeRabbit
- Chores
- Updated a bundled component.