9
9
// ---------------------------------------------------------------------------
10
10
//
11
11
// © 2004-2007 nakamuxu
12
- // © 2014-2023 1024jp
12
+ // © 2014-2024 1024jp
13
13
//
14
14
// Licensed under the Apache License, Version 2.0 (the "License");
15
15
// you may not use this file except in compliance with the License.
@@ -45,8 +45,8 @@ final class ScriptManager: NSObject, NSFilePresenter {
45
45
// MARK: Private Properties
46
46
47
47
private var scriptsDirectoryURL : URL ?
48
- private var scriptHandlersTable : [ ScriptingEventType : [ any EventScript ] ] = [ : ]
49
48
private var currentContext : String ? { didSet { Task { await self . applyShortcuts ( ) } } }
49
+ @Atomic private var scriptHandlersTable : [ ScriptingEventType : [ any EventScript ] ] = [ : ]
50
50
51
51
private var debounceTask : Task < Void , any Error > ?
52
52
private var syntaxObserver : AnyCancellable ?
@@ -222,7 +222,7 @@ final class ScriptManager: NSObject, NSFilePresenter {
222
222
@MainActor private func buildScriptMenu( ) async {
223
223
224
224
self . debounceTask? . cancel ( )
225
- self . scriptHandlersTable. removeAll ( )
225
+ self . $ scriptHandlersTable. mutate { $0 . removeAll ( ) }
226
226
227
227
guard let directoryURL = self . scriptsDirectoryURL else { return }
228
228
@@ -232,7 +232,9 @@ final class ScriptManager: NSObject, NSFilePresenter {
232
232
let eventScripts = scriptMenuItems. flatMap ( \. scripts)
233
233
. compactMap { $0 as? any EventScript }
234
234
for type in ScriptingEventType . allCases {
235
- self . scriptHandlersTable [ type] = eventScripts. filter { $0. eventTypes. contains ( type) }
235
+ self . $scriptHandlersTable. mutate {
236
+ $0 [ type] = eventScripts. filter { $0. eventTypes. contains ( type) }
237
+ }
236
238
}
237
239
238
240
let menuItems = scriptMenuItems. map { $0. menuItem ( action: #selector( launchScript) , target: self ) }
0 commit comments