@@ -191,6 +191,7 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
191191 sidebarSplitItem. canCollapse = true
192192 sidebarSplitItem. minimumThickness = 280
193193 sidebarSplitItem. maximumThickness = 600
194+ sidebarSplitItem. collapseBehavior = . preferResizingSplitViewWithFixedSiblings
194195 addSplitViewItem ( sidebarSplitItem)
195196
196197 detailHosting = NSHostingController ( rootView: AnyView ( buildDetailView ( ) ) )
@@ -212,6 +213,7 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
212213 inspectorSplitItem. canCollapse = true
213214 inspectorSplitItem. minimumThickness = 270
214215 inspectorSplitItem. maximumThickness = 400
216+ inspectorSplitItem. collapseBehavior = . preferResizingSplitViewWithFixedSiblings
215217 addSplitViewItem ( inspectorSplitItem)
216218
217219 if currentSession? . driver == nil {
@@ -225,97 +227,18 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
225227 inspectorSplitItem. isCollapsed = !inspectorPresented
226228 }
227229
228- override func splitViewDidResizeSubviews( _ notification: Notification ) {
229- super. splitViewDidResizeSubviews ( notification)
230- recomputeWindowMinimumSize ( )
231- }
232-
233230 private func materializeInspectorIfNeeded( ) {
234231 guard !hasMaterializedInspector, let inspectorHosting else { return }
235232 hasMaterializedInspector = true
236233 inspectorHosting. rootView = AnyView ( buildInspectorView ( ) )
237234 }
238235
239- internal struct PaneMinimum {
240- internal let minimumThickness : CGFloat
241- internal let isCollapsed : Bool
242- }
243-
244- internal static func resolvedContentMinSize(
245- base: NSSize ,
246- panes: [ PaneMinimum ] ,
247- dividerThickness: CGFloat
248- ) -> NSSize {
249- let visiblePanes = panes. filter { !$0. isCollapsed }
250- let paneWidth = visiblePanes. reduce ( CGFloat . zero) { partialResult, pane in
251- partialResult + max( CGFloat . zero, pane. minimumThickness)
252- }
253- let dividerCount = max ( visiblePanes. count - 1 , 0 )
254- let resolvedWidth = max ( base. width, paneWidth + ( CGFloat ( dividerCount) * dividerThickness) )
255- return NSSize ( width: resolvedWidth, height: base. height)
256- }
257-
258- private func recomputeWindowMinimumSize(
259- sidebarCollapsed: Bool ? = nil ,
260- inspectorCollapsed: Bool ? = nil
261- ) {
262- guard let window = view. window else { return }
263-
264- let resolvedMinSize = Self . resolvedContentMinSize (
265- base: NSSize ( width: Self . baseContentMinWidth, height: Self . baseContentMinHeight) ,
266- panes: [
267- PaneMinimum (
268- minimumThickness: sidebarSplitItem? . minimumThickness ?? . zero,
269- isCollapsed: sidebarCollapsed ?? ( sidebarSplitItem? . isCollapsed ?? true )
270- ) ,
271- PaneMinimum (
272- minimumThickness: detailSplitItem? . minimumThickness ?? . zero,
273- isCollapsed: detailSplitItem? . isCollapsed ?? false
274- ) ,
275- PaneMinimum (
276- minimumThickness: inspectorSplitItem? . minimumThickness ?? . zero,
277- isCollapsed: inspectorCollapsed ?? ( inspectorSplitItem? . isCollapsed ?? true )
278- )
279- ] ,
280- dividerThickness: splitView. dividerThickness
281- )
282-
283- if window. contentMinSize != resolvedMinSize {
284- window. contentMinSize = resolvedMinSize
285- }
286-
287- let currentContentSize = window. contentRect ( forFrameRect: window. frame) . size
288- guard currentContentSize. width < resolvedMinSize. width || currentContentSize. height < resolvedMinSize. height else { return }
289- window. setContentSize ( NSSize (
290- width: max ( currentContentSize. width, resolvedMinSize. width) ,
291- height: max ( currentContentSize. height, resolvedMinSize. height)
292- ) )
293- }
294-
295- private func setCollapsed(
296- _ isCollapsed: Bool ,
297- for splitItem: NSSplitViewItem ? ,
298- prepareWindowMinimumSize: ( ( ) -> Void ) ? = nil
299- ) {
300- guard let splitItem else { return }
301-
302- if splitItem. isCollapsed == isCollapsed {
303- recomputeWindowMinimumSize ( )
304- return
305- }
306-
307- prepareWindowMinimumSize ? ( )
308-
309- guard view. window? . isVisible == true else {
310- splitItem. isCollapsed = isCollapsed
311- recomputeWindowMinimumSize ( )
312- return
313- }
314-
315- NSAnimationContext . runAnimationGroup { _ in
236+ private func setCollapsed( _ isCollapsed: Bool , for splitItem: NSSplitViewItem ? ) {
237+ guard let splitItem, splitItem. isCollapsed != isCollapsed else { return }
238+ if view. window? . isVisible == true {
316239 splitItem. animator ( ) . isCollapsed = isCollapsed
317- } completionHandler : { [ weak self ] in
318- self ? . recomputeWindowMinimumSize ( )
240+ } else {
241+ splitItem . isCollapsed = isCollapsed
319242 }
320243 }
321244
@@ -340,7 +263,6 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
340263 }
341264
342265 installObservers ( )
343- recomputeWindowMinimumSize ( )
344266 window. recalculateKeyViewLoop ( )
345267 }
346268
@@ -435,10 +357,7 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
435357 }
436358
437359 let collapseSidebar = newSession. driver == nil
438- setCollapsed ( collapseSidebar, for: sidebarSplitItem) { [ weak self] in
439- guard !collapseSidebar else { return }
440- self ? . recomputeWindowMinimumSize ( sidebarCollapsed: false )
441- }
360+ setCollapsed ( collapseSidebar, for: sidebarSplitItem)
442361 rebuildPanes ( )
443362 }
444363
@@ -604,16 +523,12 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
604523
605524 func showInspector( ) {
606525 materializeInspectorIfNeeded ( )
607- setCollapsed ( false , for: inspectorSplitItem) { [ weak self] in
608- self ? . recomputeWindowMinimumSize ( inspectorCollapsed: false )
609- }
526+ setCollapsed ( false , for: inspectorSplitItem)
610527 UserDefaults . standard. set ( true , forKey: Self . inspectorPresentedKey)
611528 }
612529
613530 func hideInspector( ) {
614- setCollapsed ( true , for: inspectorSplitItem) { [ weak self] in
615- self ? . recomputeWindowMinimumSize ( inspectorCollapsed: true )
616- }
531+ setCollapsed ( true , for: inspectorSplitItem)
617532 UserDefaults . standard. set ( false , forKey: Self . inspectorPresentedKey)
618533 }
619534
@@ -640,9 +555,7 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
640555
641556 if sidebarSplitItem? . isCollapsed == true {
642557 sidebarState. selectedSidebarTab = tab
643- setCollapsed ( false , for: sidebarSplitItem) { [ weak self] in
644- self ? . recomputeWindowMinimumSize ( sidebarCollapsed: false )
645- }
558+ setCollapsed ( false , for: sidebarSplitItem)
646559 } else if sidebarState. selectedSidebarTab == tab {
647560 setCollapsed ( true , for: sidebarSplitItem)
648561 } else {
@@ -652,7 +565,5 @@ internal final class MainSplitViewController: NSSplitViewController, InspectorVi
652565
653566 // MARK: - Constants
654567
655- internal static let baseContentMinWidth : CGFloat = 720
656- internal static let baseContentMinHeight : CGFloat = 480
657568 private static let inspectorPresentedKey = " com.TablePro.rightPanel.isPresented "
658569}
0 commit comments