From 4113ec7a0d79c912551e80164f68a7fda9143c95 Mon Sep 17 00:00:00 2001 From: Renan Greca Date: Fri, 17 Feb 2023 09:21:10 +0100 Subject: [PATCH 1/2] Push newly created file into the workspace (#696) --- .../NavigatorSidebarToolbarBottom.swift | 12 +++++++++++- CodeEdit/Utils/WorkspaceClient/Model/FileItem.swift | 4 +++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift b/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift index 7ff00e7f46..25c22b69e3 100644 --- a/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift +++ b/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift @@ -33,7 +33,17 @@ struct NavigatorSidebarToolbarBottom: View { Button("Add File") { guard let folderURL = workspace.workspaceClient?.folderURL() else { return } guard let root = try? workspace.workspaceClient?.getFileItem(folderURL.path) else { return } - root.addFile(fileName: "untitled") // TODO: use currently selected file instead of root + let newFile = root.addFile(fileName: "untitled") // TODO: use currently selected file instead of root + + DispatchQueue.global(qos: .background).async { + DispatchQueue.main.sync { + guard let newFileItem = try? workspace.workspaceClient?.getFileItem(newFile) else { + return + } + workspace.openTab(item: newFileItem) + } + } + } Button("Add Folder") { guard let folderURL = workspace.workspaceClient?.folderURL() else { return } diff --git a/CodeEdit/Utils/WorkspaceClient/Model/FileItem.swift b/CodeEdit/Utils/WorkspaceClient/Model/FileItem.swift index 7cd2fe326f..1e006f107f 100644 --- a/CodeEdit/Utils/WorkspaceClient/Model/FileItem.swift +++ b/CodeEdit/Utils/WorkspaceClient/Model/FileItem.swift @@ -212,7 +212,7 @@ extension WorkspaceClient { /// This function allows creating files in the selected folder or project main directory /// - Parameter fileName: The name of the new file - func addFile(fileName: String) { + func addFile(fileName: String) -> String { // check if folder, if it is create file under self var fileUrl = (self.isFolder ? self.url.appendingPathComponent(fileName) : @@ -231,6 +231,8 @@ extension WorkspaceClient { contents: nil, attributes: [FileAttributeKey.creationDate: Date()] ) + + return fileUrl.path } /// This function deletes the item or folder from the current project From e4ab4ab41f1b5c7107b051086af0e33613b50742 Mon Sep 17 00:00:00 2001 From: Renan Greca Date: Sat, 18 Feb 2023 09:34:26 +0100 Subject: [PATCH 2/2] Change DispatchQueue call to avoid two context switches (#696) --- .../NavigatorSidebarToolbarBottom.swift | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift b/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift index 25c22b69e3..3d743f6a61 100644 --- a/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift +++ b/CodeEdit/Features/NavigatorSidebar/NavigatorSidebarToolbarBottom.swift @@ -35,13 +35,11 @@ struct NavigatorSidebarToolbarBottom: View { guard let root = try? workspace.workspaceClient?.getFileItem(folderURL.path) else { return } let newFile = root.addFile(fileName: "untitled") // TODO: use currently selected file instead of root - DispatchQueue.global(qos: .background).async { - DispatchQueue.main.sync { - guard let newFileItem = try? workspace.workspaceClient?.getFileItem(newFile) else { - return - } - workspace.openTab(item: newFileItem) + DispatchQueue.main.async { + guard let newFileItem = try? workspace.workspaceClient?.getFileItem(newFile) else { + return } + workspace.openTab(item: newFileItem) } }