All notable changes to Bonsplit will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed delegate notifications not being sent when closing tabs (#2)
- Tabs now correctly communicate through
BonsplitControllerfor proper delegate callbacks
- Tabs now correctly communicate through
- New public method
closeTab(_ tabId: TabID, inPane paneId: PaneID) -> Boolfor efficient tab closing when pane is known
-
Geometry Query: Query pane layout with pixel coordinates for integration with external programs
layoutSnapshot()- Get flat list of pane geometries with pixel coordinatestreeSnapshot()- Get full tree structure for external consumptionfindSplit(_:)- Check if a split exists by UUID
-
Programmatic Updates: Control divider positions from external sources
setDividerPosition(_:forSplit:fromExternal:)- Set divider position with loop preventionsetContainerFrame(_:)- Update container frame when window moves/resizes
-
Geometry Notifications: Receive callbacks when geometry changes
didChangeGeometrydelegate callback - Notified when any pane geometry changesshouldNotifyDuringDragdelegate callback - Opt-in to real-time notifications during divider drag
LayoutSnapshot- Full tree snapshot with pixel coordinates and timestampPixelRect- Pixel rectangle for external consumption (Codable, Sendable)PaneGeometry- Geometry for a single pane including frame and tab infoExternalTreeNode- Recursive tree representation (enum: pane or split)ExternalPaneNode- Pane node for external consumptionExternalSplitNode- Split node with orientation and divider positionExternalTab- Tab info for external consumption
- Debug window in Example app for testing synchronization features
- Tab bar with drag-and-drop reordering
- Horizontal and vertical split panes
- 120fps animations
- Configurable appearance and behavior
- Delegate callbacks for all tab and pane events
- Keyboard navigation between panes
- Content view lifecycle options (recreateOnSwitch, keepAllAlive)
- Configuration presets (default, singlePane, readOnly)