From 8a0595b3a186b05f270c154e198151c67e990d9b Mon Sep 17 00:00:00 2001 From: Lukas Pistrol Date: Sun, 15 Jan 2023 01:24:03 +0100 Subject: [PATCH 1/6] fix the height of the general settings pane --- .../Sections/GeneralPreferences/GeneralPreferencesView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/CodeEdit/Features/AppPreferences/Sections/GeneralPreferences/GeneralPreferencesView.swift b/CodeEdit/Features/AppPreferences/Sections/GeneralPreferences/GeneralPreferencesView.swift index f199c89f38..5ef88fba71 100644 --- a/CodeEdit/Features/AppPreferences/Sections/GeneralPreferences/GeneralPreferencesView.swift +++ b/CodeEdit/Features/AppPreferences/Sections/GeneralPreferences/GeneralPreferencesView.swift @@ -55,6 +55,7 @@ struct GeneralPreferencesView: View { updaterSection } } + .frame(minHeight: 650) } } From 605cf54e6cb476d0abb7a70f9b8914870f882dcb Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Sat, 14 Jan 2023 23:44:05 +0000 Subject: [PATCH 2/6] Let inspector view resize --- .../CodeEditSplitViewController.swift | 52 ++++++++++++++++--- .../CodeEditWindowController.swift | 6 +-- .../InspectorSidebarView.swift | 2 +- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift index f7472878df..060dc80bbe 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift @@ -7,7 +7,7 @@ import Cocoa -private extension CGFloat { +fileprivate extension CGFloat { static let snapWidth: CGFloat = 272 static let minSnapWidth: CGFloat = snapWidth - 10 @@ -51,12 +51,50 @@ final class CodeEditSplitViewController: NSSplitViewController { constrainSplitPosition proposedPosition: CGFloat, ofSubviewAt dividerIndex: Int ) -> CGFloat { - if (CGFloat.minSnapWidth...CGFloat.maxSnapWidth).contains(proposedPosition) { - isSnapped = true - return .snapWidth - } else { - isSnapped = false - return proposedPosition + if dividerIndex == 0 { + // Navigator + if (CGFloat.minSnapWidth...CGFloat.maxSnapWidth).contains(proposedPosition) { + isSnapped = true + return .snapWidth + } else { + isSnapped = false + if proposedPosition <= 121 { + splitViewItems.first?.isCollapsed = true + return 0 + } + return max(242, proposedPosition) + } + } else if dividerIndex == 1 { + let proposedWidth = view.frame.width - proposedPosition + if proposedWidth <= 121 { + splitViewItems.last?.isCollapsed = true + removeToolbarItemIfNeeded() + return proposedPosition + } + splitViewItems.last?.isCollapsed = false + insertToolbarItemIfNeeded() + return min(view.frame.width - 242, proposedPosition) + } + return proposedPosition + } + + /// Quick fix for list tracking separator needing to be added again after closing, then opening the inspector with a drag. + private func insertToolbarItemIfNeeded() { + guard !( + view.window?.toolbar?.items.contains(where: { $0.itemIdentifier == .itemListTrackingSeparator }) ?? true + ) else { + return + } + view.window?.toolbar?.insertItem(withItemIdentifier: .itemListTrackingSeparator, at: 4) + } + + /// Quick fix for list tracking separator needing to be removed after closing the inspector with a drag + private func removeToolbarItemIfNeeded() { + guard let index = view.window?.toolbar?.items.firstIndex( + where: { $0.itemIdentifier == .itemListTrackingSeparator } + ) else { + return } + view.window?.toolbar?.removeItem(at: index) } } diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 58a8830927..dd91b55dbb 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -92,9 +92,9 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { viewController: NSHostingController(rootView: inspectorView) ) inspector.titlebarSeparatorStyle = .none - inspector.minimumThickness = 260 - inspector.maximumThickness = 260 + inspector.minimumThickness = 242 inspector.isCollapsed = true + inspector.canCollapse = true inspector.collapseBehavior = .useConstraints splitVC.addSplitViewItem(inspector) @@ -288,7 +288,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { } } -private extension NSToolbarItem.Identifier { +extension NSToolbarItem.Identifier { static let toggleFirstSidebarItem: NSToolbarItem.Identifier = NSToolbarItem.Identifier("ToggleFirstSidebarItem") static let toggleLastSidebarItem: NSToolbarItem.Identifier = NSToolbarItem.Identifier("ToggleLastSidebarItem") static let itemListTrackingSeparator = NSToolbarItem.Identifier("ItemListTrackingSeparator") diff --git a/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift b/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift index 9682c24f27..f428caaabb 100644 --- a/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift +++ b/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift @@ -46,7 +46,7 @@ struct InspectorSidebarView: View { } } .frame( - minWidth: 250, + minWidth: 242, idealWidth: 260, minHeight: 0, maxHeight: .infinity, From 27f90f02a033c7ec7ea3d69d337dae0f1a532153 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Sat, 14 Jan 2023 23:47:42 +0000 Subject: [PATCH 3/6] Fix lint warning --- .../Documents/Controllers/CodeEditSplitViewController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift index 060dc80bbe..8a28cf4283 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift @@ -78,7 +78,8 @@ final class CodeEditSplitViewController: NSSplitViewController { return proposedPosition } - /// Quick fix for list tracking separator needing to be added again after closing, then opening the inspector with a drag. + /// Quick fix for list tracking separator needing to be added again after closing, + /// then opening the inspector with a drag. private func insertToolbarItemIfNeeded() { guard !( view.window?.toolbar?.items.contains(where: { $0.itemIdentifier == .itemListTrackingSeparator }) ?? true From cc82b8f5b28792d9fe7e738106763540092396bb Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Sun, 15 Jan 2023 00:10:21 +0000 Subject: [PATCH 4/6] Fix split view test --- CodeEditTests/Features/Documents/DocumentsUnitTests.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CodeEditTests/Features/Documents/DocumentsUnitTests.swift b/CodeEditTests/Features/Documents/DocumentsUnitTests.swift index 3903560823..73ef89c2c2 100644 --- a/CodeEditTests/Features/Documents/DocumentsUnitTests.swift +++ b/CodeEditTests/Features/Documents/DocumentsUnitTests.swift @@ -46,7 +46,8 @@ final class DocumentsUnitTests: XCTestCase { func testSplitViewControllerStopSnappedWhenWidthIsLowerAppropriateRange() { // Given - let position = (0..<260).randomElement() ?? .zero + // 242 is the minimum width of the sidebar + let position = (242..<260).randomElement() ?? .zero // When let result = splitViewController.splitView( From 8382df67c719fa2064edaf9360dffe58417d7f90 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Sun, 15 Jan 2023 00:13:45 +0000 Subject: [PATCH 5/6] Add `minSidebarWidth` constant --- .../Controllers/CodeEditSplitViewController.swift | 10 +++++----- .../Controllers/CodeEditWindowController.swift | 6 ++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift index 8a28cf4283..34ea2118b5 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditSplitViewController.swift @@ -7,7 +7,7 @@ import Cocoa -fileprivate extension CGFloat { +private extension CGFloat { static let snapWidth: CGFloat = 272 static let minSnapWidth: CGFloat = snapWidth - 10 @@ -58,22 +58,22 @@ final class CodeEditSplitViewController: NSSplitViewController { return .snapWidth } else { isSnapped = false - if proposedPosition <= 121 { + if proposedPosition <= CodeEditWindowController.minSidebarWidth / 2 { splitViewItems.first?.isCollapsed = true return 0 } - return max(242, proposedPosition) + return max(CodeEditWindowController.minSidebarWidth, proposedPosition) } } else if dividerIndex == 1 { let proposedWidth = view.frame.width - proposedPosition - if proposedWidth <= 121 { + if proposedWidth <= CodeEditWindowController.minSidebarWidth / 2 { splitViewItems.last?.isCollapsed = true removeToolbarItemIfNeeded() return proposedPosition } splitViewItems.last?.isCollapsed = false insertToolbarItemIfNeeded() - return min(view.frame.width - 242, proposedPosition) + return min(view.frame.width - CodeEditWindowController.minSidebarWidth, proposedPosition) } return proposedPosition } diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index dd91b55dbb..ae5859673d 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -9,6 +9,8 @@ import Cocoa import SwiftUI final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { + static let minSidebarWidth: CGFloat = 242 + private var prefs: AppPreferencesModel = .shared var workspace: WorkspaceDocument? @@ -73,7 +75,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { sidebarWithViewController: NSHostingController(rootView: navigatorView) ) navigator.titlebarSeparatorStyle = .none - navigator.minimumThickness = 242 + navigator.minimumThickness = Self.minSidebarWidth navigator.collapseBehavior = .useConstraints splitVC.addSplitViewItem(navigator) @@ -92,7 +94,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate { viewController: NSHostingController(rootView: inspectorView) ) inspector.titlebarSeparatorStyle = .none - inspector.minimumThickness = 242 + inspector.minimumThickness = Self.minSidebarWidth inspector.isCollapsed = true inspector.canCollapse = true inspector.collapseBehavior = .useConstraints From ae44f86ebf85bf16010c27ea12242f34198c846e Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Sun, 15 Jan 2023 00:15:43 +0000 Subject: [PATCH 6/6] Use `minSidebarWidth` in inspector view --- CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift b/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift index f428caaabb..8ac356c360 100644 --- a/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift +++ b/CodeEdit/Features/InspectorSidebar/InspectorSidebarView.swift @@ -46,7 +46,7 @@ struct InspectorSidebarView: View { } } .frame( - minWidth: 242, + minWidth: CodeEditWindowController.minSidebarWidth, idealWidth: 260, minHeight: 0, maxHeight: .infinity,