From 7c38f778cc7b6835f7c23934a888aa36dc92e98c Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Tue, 23 Jul 2024 02:51:31 +0100 Subject: [PATCH 01/11] add `updateStatusBarInfo` view modifier --- .../Editor/Views/NonTextFileView.swift | 24 ++++++++----------- .../ViewModifiers/UpdateStatusBarInfo.swift | 14 +++++++++-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/NonTextFileView.swift b/CodeEdit/Features/Editor/Views/NonTextFileView.swift index 3ff4a30f18..f66058b0a0 100644 --- a/CodeEdit/Features/Editor/Views/NonTextFileView.swift +++ b/CodeEdit/Features/Editor/Views/NonTextFileView.swift @@ -21,23 +21,20 @@ struct NonTextFileView: View { @EnvironmentObject private var statusBarViewModel: StatusBarViewModel var body: some View { - Group { if let fileURL = fileDocument.fileURL { - if let utType = fileDocument.utType { - - if utType.conforms(to: .image) { - ImageFileView(fileURL) - .modifier(UpdateStatusBarInfo(withURL: fileURL)) - } else if utType.conforms(to: .pdf) { - PDFFileView(fileURL) - .modifier(UpdateStatusBarInfo(withURL: fileURL)) + Group { + if let utType = fileDocument.utType { + if utType.conforms(to: .image) { + ImageFileView(fileURL) + } else if utType.conforms(to: .pdf) { + PDFFileView(fileURL) + } + } else { + AnyFileView(fileURL) } - } else { - AnyFileView(fileURL) - .modifier(UpdateStatusBarInfo(withURL: fileURL)) } - + .updateStatusBarInfo(with: fileURL) } else { ZStack { Text("Cannot retrieve URL to the file you opened.") @@ -48,6 +45,5 @@ struct NonTextFileView: View { statusBarViewModel.dimensions = nil statusBarViewModel.fileSize = nil } - } } diff --git a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift index e5385074d7..ad545e86ce 100644 --- a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift +++ b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift @@ -15,7 +15,11 @@ import SwiftUI struct UpdateStatusBarInfo: ViewModifier { /// The URL of the file to compute information from. - let withURL: URL + let fileURL: URL + + init(with url: URL) { + self.fileURL = url + } @EnvironmentObject private var editorManager: EditorManager @EnvironmentObject private var statusBarViewModel: StatusBarViewModel @@ -48,7 +52,7 @@ struct UpdateStatusBarInfo: ViewModifier { func body(content: Content) -> some View { content .onAppear { - let statusBarInfo = computeStatusBarInfo(url: withURL) + let statusBarInfo = computeStatusBarInfo(url: fileURL) statusBarViewModel.fileSize = statusBarInfo?.fileSize statusBarViewModel.dimensions = statusBarInfo?.dimensions } @@ -61,3 +65,9 @@ struct UpdateStatusBarInfo: ViewModifier { } } + +extension View { + func updateStatusBarInfo(with url: URL) -> some View { + modifier(UpdateStatusBarInfo(with: url)) + } +} From 7ebd76f6c60639305887b1424a22c8b20b7dbbdd Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Tue, 23 Jul 2024 03:08:03 +0100 Subject: [PATCH 02/11] fix QuickLook previews in single file window --- .../Features/Editor/Views/CodeFileView.swift | 4 ---- .../Editor/Views/NonTextFileView.swift | 1 - .../Editor/Views/WindowCodeFileView.swift | 21 +++++++------------ 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/CodeFileView.swift b/CodeEdit/Features/Editor/Views/CodeFileView.swift index f485f277ee..7e9054f142 100644 --- a/CodeEdit/Features/Editor/Views/CodeFileView.swift +++ b/CodeEdit/Features/Editor/Views/CodeFileView.swift @@ -46,8 +46,6 @@ struct CodeFileView: View { @Environment(\.colorScheme) private var colorScheme - @EnvironmentObject private var editorManager: EditorManager - @ObservedObject private var themeModel: ThemeModel = .shared private var cancellables = Set() @@ -105,8 +103,6 @@ struct CodeFileView: View { @Environment(\.edgeInsets) private var edgeInsets - @EnvironmentObject private var editor: Editor - var body: some View { CodeEditSourceEditor( codeFile.content ?? NSTextStorage(), diff --git a/CodeEdit/Features/Editor/Views/NonTextFileView.swift b/CodeEdit/Features/Editor/Views/NonTextFileView.swift index f66058b0a0..e92e329641 100644 --- a/CodeEdit/Features/Editor/Views/NonTextFileView.swift +++ b/CodeEdit/Features/Editor/Views/NonTextFileView.swift @@ -17,7 +17,6 @@ struct NonTextFileView: View { /// The file document you wish to open. let fileDocument: CodeFileDocument - @EnvironmentObject private var editorManager: EditorManager @EnvironmentObject private var statusBarViewModel: StatusBarViewModel var body: some View { diff --git a/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift b/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift index a3edb056f1..75a6aab124 100644 --- a/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift +++ b/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift @@ -13,20 +13,15 @@ import SwiftUI struct WindowCodeFileView: View { var codeFile: CodeFileDocument - @State var hasAppeared = false - @FocusState var focused: Bool - var body: some View { - Group { - if !hasAppeared { - Color.clear.onAppear { - hasAppeared = true - focused = true - } - } else { - CodeFileView(codeFile: codeFile) - .focused($focused) - } + if let utType = codeFile.utType, utType.conforms(to: .text) { + CodeFileView(codeFile: codeFile) + } else { + NonTextFileView(fileDocument: codeFile) + // These are not used in single file mode, but since environment objects + // cannot be optional, they have to be injected in the environment. + .environmentObject(EditorManager()) + .environmentObject(StatusBarViewModel()) } } } From 5c3b48e542831cd0e26ef9b74c587fadf7fd25ef Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Tue, 23 Jul 2024 03:27:41 +0100 Subject: [PATCH 03/11] change `fileURL` type to `NSURL` in `AnyFileView` --- CodeEdit/Features/Editor/Views/AnyFileView.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/AnyFileView.swift b/CodeEdit/Features/Editor/Views/AnyFileView.swift index 9851fa6af3..eaaeb9ab2d 100644 --- a/CodeEdit/Features/Editor/Views/AnyFileView.swift +++ b/CodeEdit/Features/Editor/Views/AnyFileView.swift @@ -17,20 +17,20 @@ import QuickLookUI struct AnyFileView: NSViewRepresentable { /// URL of the file to preview. You can pass in any file type. - private let fileURL: URL + private let fileURL: NSURL init(_ fileURL: URL) { - self.fileURL = fileURL + self.fileURL = fileURL as NSURL } func makeNSView(context: Context) -> QLPreviewView { let qlPreviewView = QLPreviewView() - qlPreviewView.previewItem = fileURL as any QLPreviewItem + qlPreviewView.previewItem = fileURL return qlPreviewView } func updateNSView(_ qlPreviewView: QLPreviewView, context: Context) { - qlPreviewView.previewItem = fileURL as any QLPreviewItem + qlPreviewView.previewItem = fileURL } } From 0d0aa8845f549e401fc743bd2d8177c603ecb5f3 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Tue, 23 Jul 2024 04:04:21 +0100 Subject: [PATCH 04/11] fix QuickLook previews in Open Quickly Use `dismantleNSView` in `AnyFileView` to prevent crashes when using Open Quickly. What crashes? 1. When using Open Quickly without the workaround in `AnyFileView`, search for a media file (.png, .gif, .mp4, etc) 2. Press escape to close Open Quickly 3. re-open Open Quickly. The media preview is gone 4. Attempt to navigate upwards or downwards using the arrow buttons 5. A crash occurs (QuickLook is attempting to reuse an already closed preview) --- .../Documents/Controllers/CodeEditWindowController.swift | 5 ++++- CodeEdit/Features/Editor/Views/AnyFileView.swift | 7 +++++++ .../OpenQuickly/Views/OpenQuicklyPreviewView.swift | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 4a19dc30e1..6d9bc5963a 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -151,7 +151,10 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs panel.close() } openFile: { file in workspace.editorManager?.openTab(item: file) - }.environmentObject(workspace) + } + .environmentObject(workspace) + .environmentObject(workspace.editorManager!) // Should be available when using Open Quickly + .environmentObject(workspace.statusBarViewModel!) // Should be available when using Open Quickly panel.contentView = NSHostingView(rootView: SettingsInjector { contentView }) window?.addChildWindow(panel, ordered: .above) diff --git a/CodeEdit/Features/Editor/Views/AnyFileView.swift b/CodeEdit/Features/Editor/Views/AnyFileView.swift index eaaeb9ab2d..db58b7274d 100644 --- a/CodeEdit/Features/Editor/Views/AnyFileView.swift +++ b/CodeEdit/Features/Editor/Views/AnyFileView.swift @@ -26,6 +26,7 @@ struct AnyFileView: NSViewRepresentable { func makeNSView(context: Context) -> QLPreviewView { let qlPreviewView = QLPreviewView() qlPreviewView.previewItem = fileURL + qlPreviewView.shouldCloseWithWindow = false // Temp work around for something more reasonable. return qlPreviewView } @@ -33,4 +34,10 @@ struct AnyFileView: NSViewRepresentable { qlPreviewView.previewItem = fileURL } + // Temp work around for something more reasonable. + // Open quickly should empty the results (but cache the query) when closed, + // and then re-search or recompute the results when re-opened. + static func dismantleNSView(_ qlPreviewView: QLPreviewView, coordinator: ()) { + qlPreviewView.close() + } } diff --git a/CodeEdit/Features/OpenQuickly/Views/OpenQuicklyPreviewView.swift b/CodeEdit/Features/OpenQuickly/Views/OpenQuicklyPreviewView.swift index 78edae4d3e..920bdf2c48 100644 --- a/CodeEdit/Features/OpenQuickly/Views/OpenQuicklyPreviewView.swift +++ b/CodeEdit/Features/OpenQuickly/Views/OpenQuicklyPreviewView.swift @@ -19,7 +19,7 @@ struct OpenQuicklyPreviewView: View { let doc = try? CodeFileDocument( for: item.url, withContentsOf: item.url, - ofType: "public.source-code" + ofType: item.contentType?.identifier ?? "public.source-code" ) self._document = .init(wrappedValue: doc ?? .init()) } From fb190afacc080f4ae33e7523f112e696488cf5ed Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:01:48 +0100 Subject: [PATCH 05/11] add assertionFailure in `CodeEditWindowController.openQuickly` for when an editorManager or statusBarViewModel is unavailable --- .../Controllers/CodeEditWindowController.swift | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index 6d9bc5963a..a2bd112bfb 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -144,6 +144,13 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs quickOpenPanel.makeKeyAndOrderFront(self) } } else { + guard let editorManager = workspace.editorManager, + let statusBarViewModel = workspace.statusBarViewModel else { + // swiftlint:disable:next line_length + assertionFailure("An EditorManager and/or StatusBarViewModel is not set up in this workspace. Cannot use Open Quickly.") + return + } + let panel = SearchPanel() self.quickOpenPanel = panel @@ -153,8 +160,8 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs workspace.editorManager?.openTab(item: file) } .environmentObject(workspace) - .environmentObject(workspace.editorManager!) // Should be available when using Open Quickly - .environmentObject(workspace.statusBarViewModel!) // Should be available when using Open Quickly + .environmentObject(editorManager) + .environmentObject(statusBarViewModel) panel.contentView = NSHostingView(rootView: SettingsInjector { contentView }) window?.addChildWindow(panel, ordered: .above) From 07d5e0a1da6a34e5c929accac31de9ee7d828df1 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:25:08 +0100 Subject: [PATCH 06/11] make `UpdateStatusBarInfo.fileURL` an optional --- .../ViewModifiers/UpdateStatusBarInfo.swift | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift index ad545e86ce..2a192f9ad1 100644 --- a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift +++ b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift @@ -15,9 +15,9 @@ import SwiftUI struct UpdateStatusBarInfo: ViewModifier { /// The URL of the file to compute information from. - let fileURL: URL + let fileURL: URL? - init(with url: URL) { + init(with url: URL?) { self.fileURL = url } @@ -50,24 +50,28 @@ struct UpdateStatusBarInfo: ViewModifier { } func body(content: Content) -> some View { - content - .onAppear { - let statusBarInfo = computeStatusBarInfo(url: fileURL) - statusBarViewModel.fileSize = statusBarInfo?.fileSize - statusBarViewModel.dimensions = statusBarInfo?.dimensions - } - .onChange(of: editorManager.activeEditor.selectedTab) { newTab in - guard let newTab else { return } - let statusBarInfo = computeStatusBarInfo(url: newTab.file.url) - statusBarViewModel.fileSize = statusBarInfo?.fileSize - statusBarViewModel.dimensions = statusBarInfo?.dimensions - } + if let fileURL { + content + .onAppear { + let statusBarInfo = computeStatusBarInfo(url: fileURL) + statusBarViewModel.fileSize = statusBarInfo?.fileSize + statusBarViewModel.dimensions = statusBarInfo?.dimensions + } + .onChange(of: editorManager.activeEditor.selectedTab) { newTab in + guard let newTab else { return } + let statusBarInfo = computeStatusBarInfo(url: newTab.file.url) + statusBarViewModel.fileSize = statusBarInfo?.fileSize + statusBarViewModel.dimensions = statusBarInfo?.dimensions + } + } else { + content + } } } extension View { - func updateStatusBarInfo(with url: URL) -> some View { + func updateStatusBarInfo(with url: URL?) -> some View { modifier(UpdateStatusBarInfo(with: url)) } } From d7dcef93d79b1ae6c30407128a0e0ef99a9b8ad6 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:27:22 +0100 Subject: [PATCH 07/11] remove the need to pass environment objects to `NonTextFileView` This also prevents Open Quickly previews from updating the status bar --- CodeEdit/Features/Editor/Views/EditorAreaFileView.swift | 6 ++++++ CodeEdit/Features/Editor/Views/NonTextFileView.swift | 7 ------- CodeEdit/Features/Editor/Views/WindowCodeFileView.swift | 4 ---- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift b/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift index 18dad183f4..08752ece2b 100644 --- a/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift +++ b/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift @@ -14,6 +14,7 @@ struct EditorAreaFileView: View { @EnvironmentObject private var editorManager: EditorManager @EnvironmentObject private var editor: Editor + @EnvironmentObject private var statusBarViewModel: StatusBarViewModel @Environment(\.edgeInsets) private var edgeInsets @@ -32,6 +33,11 @@ struct EditorAreaFileView: View { NonTextFileView(fileDocument: document) .padding(.top, edgeInsets.top - 1.74) // Use the magic number to fine-tune its appearance. .padding(.bottom, StatusBarView.height + 1.26) // Use the magic number to fine-tune its appearance. + .updateStatusBarInfo(with: document.fileURL) + .onDisappear { + statusBarViewModel.dimensions = nil + statusBarViewModel.fileSize = nil + } } } else { diff --git a/CodeEdit/Features/Editor/Views/NonTextFileView.swift b/CodeEdit/Features/Editor/Views/NonTextFileView.swift index e92e329641..b1e1d3ebab 100644 --- a/CodeEdit/Features/Editor/Views/NonTextFileView.swift +++ b/CodeEdit/Features/Editor/Views/NonTextFileView.swift @@ -17,8 +17,6 @@ struct NonTextFileView: View { /// The file document you wish to open. let fileDocument: CodeFileDocument - @EnvironmentObject private var statusBarViewModel: StatusBarViewModel - var body: some View { Group { if let fileURL = fileDocument.fileURL { @@ -33,16 +31,11 @@ struct NonTextFileView: View { AnyFileView(fileURL) } } - .updateStatusBarInfo(with: fileURL) } else { ZStack { Text("Cannot retrieve URL to the file you opened.") } } } - .onDisappear { - statusBarViewModel.dimensions = nil - statusBarViewModel.fileSize = nil - } } } diff --git a/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift b/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift index 75a6aab124..3bc2a16f8b 100644 --- a/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift +++ b/CodeEdit/Features/Editor/Views/WindowCodeFileView.swift @@ -18,10 +18,6 @@ struct WindowCodeFileView: View { CodeFileView(codeFile: codeFile) } else { NonTextFileView(fileDocument: codeFile) - // These are not used in single file mode, but since environment objects - // cannot be optional, they have to be injected in the environment. - .environmentObject(EditorManager()) - .environmentObject(StatusBarViewModel()) } } } From 8dafc3988001922afd78943531348a0633be7a78 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:32:50 +0100 Subject: [PATCH 08/11] rename function parameters in `UpdateStatusBarInfo` view modifier --- .../ViewModifiers/UpdateStatusBarInfo.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift index 2a192f9ad1..70a9010dc0 100644 --- a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift +++ b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift @@ -17,8 +17,8 @@ struct UpdateStatusBarInfo: ViewModifier { /// The URL of the file to compute information from. let fileURL: URL? - init(with url: URL?) { - self.fileURL = url + init(with fileURL: URL?) { + self.fileURL = fileURL } @EnvironmentObject private var editorManager: EditorManager @@ -31,17 +31,17 @@ struct UpdateStatusBarInfo: ViewModifier { } /// Compute information that can be used to update properties in ``StatusBarFileInfoView``. - /// - Parameter url: URL of the file to compute information from. + /// - Parameter with fileURL: URL of the file to compute information from. /// - Returns: The file size and its image dimensions (if any). - private func computeStatusBarInfo(url: URL) -> ComputedStatusBarInfo? { - guard let resourceValues = try? url.resourceValues(forKeys: [.contentTypeKey, .fileSizeKey]), + private func computeStatusBarInfo(with fileURL: URL) -> ComputedStatusBarInfo? { + guard let resourceValues = try? fileURL.resourceValues(forKeys: [.contentTypeKey, .fileSizeKey]), let contentType = resourceValues.contentType, let fileSize = resourceValues.fileSize else { return nil } - if contentType.conforms(to: .image), let imageReps = NSImage(contentsOf: url)?.representations.first { + if contentType.conforms(to: .image), let imageReps = NSImage(contentsOf: fileURL)?.representations.first { let dimensions = ImageDimensions(width: imageReps.pixelsWide, height: imageReps.pixelsHigh) return ComputedStatusBarInfo(fileSize: fileSize, dimensions: dimensions) } else { // non-image file @@ -53,13 +53,13 @@ struct UpdateStatusBarInfo: ViewModifier { if let fileURL { content .onAppear { - let statusBarInfo = computeStatusBarInfo(url: fileURL) + let statusBarInfo = computeStatusBarInfo(with: fileURL) statusBarViewModel.fileSize = statusBarInfo?.fileSize statusBarViewModel.dimensions = statusBarInfo?.dimensions } .onChange(of: editorManager.activeEditor.selectedTab) { newTab in guard let newTab else { return } - let statusBarInfo = computeStatusBarInfo(url: newTab.file.url) + let statusBarInfo = computeStatusBarInfo(with: newTab.file.url) statusBarViewModel.fileSize = statusBarInfo?.fileSize statusBarViewModel.dimensions = statusBarInfo?.dimensions } From 543d1355e431730ca2fbc92fd3e1ef53d577fd01 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:34:10 +0100 Subject: [PATCH 09/11] remove `updateStatusBarInfo` view extension --- CodeEdit/Features/Editor/Views/EditorAreaFileView.swift | 2 +- .../StatusBar/ViewModifiers/UpdateStatusBarInfo.swift | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift b/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift index 08752ece2b..7189a79689 100644 --- a/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift +++ b/CodeEdit/Features/Editor/Views/EditorAreaFileView.swift @@ -33,7 +33,7 @@ struct EditorAreaFileView: View { NonTextFileView(fileDocument: document) .padding(.top, edgeInsets.top - 1.74) // Use the magic number to fine-tune its appearance. .padding(.bottom, StatusBarView.height + 1.26) // Use the magic number to fine-tune its appearance. - .updateStatusBarInfo(with: document.fileURL) + .modifier(UpdateStatusBarInfo(with: document.fileURL)) .onDisappear { statusBarViewModel.dimensions = nil statusBarViewModel.fileSize = nil diff --git a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift index 70a9010dc0..97f299bcc9 100644 --- a/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift +++ b/CodeEdit/Features/StatusBar/ViewModifiers/UpdateStatusBarInfo.swift @@ -69,9 +69,3 @@ struct UpdateStatusBarInfo: ViewModifier { } } - -extension View { - func updateStatusBarInfo(with url: URL?) -> some View { - modifier(UpdateStatusBarInfo(with: url)) - } -} From 34b9afc921ec1aa88a22c7f8c054afe897befa61 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Fri, 26 Jul 2024 16:38:36 +0100 Subject: [PATCH 10/11] remove guard in `CodeEditWindowController.openQuickly` editorManager and statusBarViewModel environment objects are not used in Open Quickly anymore --- .../Controllers/CodeEditWindowController.swift | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift index a2bd112bfb..4a19dc30e1 100644 --- a/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift +++ b/CodeEdit/Features/Documents/Controllers/CodeEditWindowController.swift @@ -144,13 +144,6 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs quickOpenPanel.makeKeyAndOrderFront(self) } } else { - guard let editorManager = workspace.editorManager, - let statusBarViewModel = workspace.statusBarViewModel else { - // swiftlint:disable:next line_length - assertionFailure("An EditorManager and/or StatusBarViewModel is not set up in this workspace. Cannot use Open Quickly.") - return - } - let panel = SearchPanel() self.quickOpenPanel = panel @@ -158,10 +151,7 @@ final class CodeEditWindowController: NSWindowController, NSToolbarDelegate, Obs panel.close() } openFile: { file in workspace.editorManager?.openTab(item: file) - } - .environmentObject(workspace) - .environmentObject(editorManager) - .environmentObject(statusBarViewModel) + }.environmentObject(workspace) panel.contentView = NSHostingView(rootView: SettingsInjector { contentView }) window?.addChildWindow(panel, ordered: .above) From 86fccc0c4bc8c87efb8dc9d0e7d1e50d1cd3c303 Mon Sep 17 00:00:00 2001 From: Paul Ebose Date: Mon, 19 Aug 2024 14:37:22 +0100 Subject: [PATCH 11/11] merge #1822 fix into this branch allow files with a utType that is neither image nor PDF to be previewed (#1822) --- .../Features/Editor/Views/NonTextFileView.swift | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CodeEdit/Features/Editor/Views/NonTextFileView.swift b/CodeEdit/Features/Editor/Views/NonTextFileView.swift index b1e1d3ebab..d43b9f10e2 100644 --- a/CodeEdit/Features/Editor/Views/NonTextFileView.swift +++ b/CodeEdit/Features/Editor/Views/NonTextFileView.swift @@ -20,17 +20,19 @@ struct NonTextFileView: View { var body: some View { Group { if let fileURL = fileDocument.fileURL { - Group { - if let utType = fileDocument.utType { - if utType.conforms(to: .image) { - ImageFileView(fileURL) - } else if utType.conforms(to: .pdf) { - PDFFileView(fileURL) - } + + if let utType = fileDocument.utType { + if utType.conforms(to: .image) { + ImageFileView(fileURL) + } else if utType.conforms(to: .pdf) { + PDFFileView(fileURL) } else { AnyFileView(fileURL) } + } else { + AnyFileView(fileURL) } + } else { ZStack { Text("Cannot retrieve URL to the file you opened.")