7
7
8
8
import SwiftUI
9
9
import CodeEditTextView
10
+ import UniformTypeIdentifiers
10
11
11
12
struct EditorAreaView : View {
12
13
@AppSettings ( \. general. showEditorJumpBar)
@@ -26,6 +27,9 @@ struct EditorAreaView: View {
26
27
27
28
@State var codeFile : CodeFileDocument ?
28
29
30
+ @Environment ( \. window. value)
31
+ private var window : NSWindow ?
32
+
29
33
init ( editor: Editor , focus: FocusState < Editor ? > . Binding ) {
30
34
self . editor = editor
31
35
self . _focus = focus
@@ -59,6 +63,10 @@ struct EditorAreaView: View {
59
63
insets. top += editorInsetAmount
60
64
}
61
65
. opacity ( dimEditorsWithoutFocus && editor != editorManager. activeEditor ? 0.5 : 1 )
66
+ . onDrop ( of: [ . fileURL] , isTargeted: nil ) { providers in
67
+ _ = handleDrop ( providers: providers)
68
+ return true
69
+ }
62
70
} else {
63
71
LoadingFileView ( selected. file. name)
64
72
. onAppear {
@@ -77,6 +85,10 @@ struct EditorAreaView: View {
77
85
. onTapGesture {
78
86
editorManager. activeEditor = editor
79
87
}
88
+ . onDrop ( of: [ . fileURL] , isTargeted: nil ) { providers in
89
+ _ = handleDrop ( providers: providers)
90
+ return true
91
+ }
80
92
}
81
93
}
82
94
. frame ( maxWidth: . infinity, maxHeight: . infinity)
@@ -122,4 +134,25 @@ struct EditorAreaView: View {
122
134
codeFile = newValue? . file. fileDocument
123
135
}
124
136
}
137
+
138
+ private func handleDrop( providers: [ NSItemProvider ] ) -> Bool {
139
+ for provider in providers {
140
+ provider. loadItem ( forTypeIdentifier: UTType . fileURL. identifier, options: nil ) { item, _ in
141
+ guard let data = item as? Data ,
142
+ let url = URL ( dataRepresentation: data, relativeTo: nil ) else {
143
+ return
144
+ }
145
+
146
+ DispatchQueue . main. async {
147
+ let file = CEWorkspaceFile ( url: url)
148
+ editor. openTab ( file: file)
149
+ editorManager. activeEditor = editor
150
+ focus = editor
151
+ NSApp . activate ( ignoringOtherApps: true )
152
+ window? . makeKeyAndOrderFront ( nil )
153
+ }
154
+ }
155
+ }
156
+ return true
157
+ }
125
158
}
0 commit comments