···312312313313 override func viewDidMoveToWindow() {
314314 super.viewDidMoveToWindow()
315315+ if window == nil {
316316+ // SwiftUI can temporarily detach a pane while rebuilding split/zoom layout.
317317+ // If we keep the stale local focus bit, detached panes still intercept bindings.
318318+ focusDidChange(false)
319319+ }
315320 updateScreenObservers()
316321 updateContentScale()
317322 updateSurfaceSize()
+14
supacodeTests/SplitTreeTests.swift
···3030 let node = try #require(tree.find(id: third.id))
3131 #expect(tree.focusTargetAfterClosing(node) === second)
3232 }
3333+3434+ @Test func visibleLeavesOnlyReturnZoomedPane() throws {
3535+ let first = SplitTreeTestView()
3636+ let second = SplitTreeTestView()
3737+3838+ let tree = try SplitTree(view: first)
3939+ .inserting(view: second, at: first, direction: .right)
4040+4141+ let zoomed = tree.settingZoomed(try #require(tree.find(id: second.id)))
4242+ let visibleLeaves = zoomed.visibleLeaves()
4343+4444+ #expect(visibleLeaves.count == 1)
4545+ #expect(visibleLeaves.first === second)
4646+ }
3347}
34483549private final class SplitTreeTestView: NSView, Identifiable {