File tree Expand file tree Collapse file tree 5 files changed +38
-9
lines changed
CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView Expand file tree Collapse file tree 5 files changed +38
-9
lines changed Original file line number Diff line number Diff line change @@ -66,7 +66,7 @@ final class ProjectNavigatorMenu: NSMenu {
6666 action: #selector( newFileFromClipboard) ,
6767 key: " v "
6868 )
69- newFileFromClipboard. keyEquivalentModifierMask = [ . command, . control ]
69+ newFileFromClipboard. keyEquivalentModifierMask = [ . command]
7070 let newFolder = menuItem ( " New Folder " , action: #selector( newFolder) )
7171
7272 let rename = menuItem ( " Rename " , action: #selector( renameFile) )
Original file line number Diff line number Diff line change @@ -121,20 +121,16 @@ extension ProjectNavigatorMenu {
121121 guard let item else { return }
122122 do {
123123 let clipBoardContent = NSPasteboard . general. string ( forType: . string) ? . data ( using: . utf8)
124- if let newFile = try workspace?
124+ if let clipBoardContent , !clipBoardContent . isEmpty , let newFile = try workspace?
125125 . workspaceFileManager?
126126 . addFile (
127127 fileName: " untitled " ,
128128 toFile: item,
129- useExtension: " " ,
130129 contents: clipBoardContent
131130 ) {
132131 workspace? . listenerModel. highlightedFileItem = newFile
133132 workspace? . editorManager? . openTab ( item: newFile)
134- }
135- /// To resolve racing condition
136- DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.1 ) {
137- self . renameFile ( )
133+ renameFile ( )
138134 }
139135 } catch {
140136 let alert = NSAlert ( error: error)
Original file line number Diff line number Diff line change 1+ //
2+ // ProjectNavigatorNSOutlineView.swift
3+ // CodeEdit
4+ //
5+ // Created by Khan Winter on 6/10/25.
6+ //
7+
8+ import AppKit
9+
10+ final class ProjectNavigatorNSOutlineView : NSOutlineView , NSMenuItemValidation {
11+ override func performKeyEquivalent( with event: NSEvent ) -> Bool {
12+ if event. charactersIgnoringModifiers == " v "
13+ && event. modifierFlags. intersection ( . deviceIndependentFlagsMask) == . command {
14+ guard let menu = menu as? ProjectNavigatorMenu else {
15+ return super. performKeyEquivalent ( with: event)
16+ }
17+ menu. delegate? . menuNeedsUpdate ? ( menu)
18+ for fileItem in selectedRowIndexes. compactMap ( { item ( atRow: $0) as? CEWorkspaceFile } ) {
19+ menu. item = fileItem
20+ menu. newFileFromClipboard ( )
21+ }
22+ return true
23+ }
24+ return super. performKeyEquivalent ( with: event)
25+ }
26+
27+ func validateMenuItem( _ menuItem: NSMenuItem ) -> Bool {
28+ if menuItem. action == #selector( ProjectNavigatorMenu . newFileFromClipboard) {
29+ return !selectedRowIndexes. isEmpty
30+ }
31+ return false
32+ }
33+ }
Original file line number Diff line number Diff line change @@ -18,12 +18,12 @@ extension ProjectNavigatorViewController: NSMenuDelegate {
1818 let row = outlineView. clickedRow
1919 guard let menu = menu as? ProjectNavigatorMenu else { return }
2020
21+ menu. workspace = workspace
2122 if row == - 1 {
2223 menu. item = nil
2324 } else {
2425 if let item = outlineView. item ( atRow: row) as? CEWorkspaceFile {
2526 menu. item = item
26- menu. workspace = workspace
2727 } else {
2828 menu. item = nil
2929 }
Original file line number Diff line number Diff line change @@ -74,7 +74,7 @@ final class ProjectNavigatorViewController: NSViewController {
7474 self . scrollView. hasVerticalScroller = true
7575 self . view = scrollView
7676
77- self . outlineView = NSOutlineView ( )
77+ self . outlineView = ProjectNavigatorNSOutlineView ( )
7878 self . outlineView. dataSource = self
7979 self . outlineView. delegate = self
8080 self . outlineView. autosaveExpandedItems = true
You can’t perform that action at this time.
0 commit comments