@@ -36,10 +36,8 @@ struct UpdatingWindowController: DynamicProperty {
3636 class WindowControllerBox : ObservableObject {
3737 public private( set) weak var controller : CodeEditWindowController ?
3838
39- private var objectWillChangeCancellable : AnyCancellable ?
40- private var utilityAreaCancellable : AnyCancellable ? // ``ViewCommands`` needs this.
41- private var windowCancellable : AnyCancellable ?
42- private var activeEditorCancellable : AnyCancellable ?
39+ private var windowCancellable : AnyCancellable ? // Needs to stick around between window changes.
40+ private var cancellables : Set < AnyCancellable > = [ ]
4341
4442 init ( ) {
4543 windowCancellable = NSApp . publisher ( for: \. keyWindow) . receive ( on: RunLoop . main) . sink { [ weak self] window in
@@ -50,25 +48,32 @@ struct UpdatingWindowController: DynamicProperty {
5048 }
5149
5250 func setNewController( _ controller: CodeEditWindowController ? ) {
53- objectWillChangeCancellable? . cancel ( )
54- objectWillChangeCancellable = nil
55- utilityAreaCancellable? . cancel ( )
56- utilityAreaCancellable = nil
57- activeEditorCancellable? . cancel ( )
58- activeEditorCancellable = nil
51+ cancellables. forEach { $0. cancel ( ) }
52+ cancellables. removeAll ( )
5953
6054 self . controller = controller
6155
62- objectWillChangeCancellable = controller? . objectWillChange. sink { [ weak self] in
56+ controller? . objectWillChange. sink { [ weak self] in
6357 self ? . objectWillChange. send ( )
6458 }
65- utilityAreaCancellable = controller? . workspace? . utilityAreaModel? . objectWillChange. sink { [ weak self] in
59+ . store ( in: & cancellables)
60+
61+ controller? . workspace? . utilityAreaModel? . objectWillChange. sink { [ weak self] in
6662 self ? . objectWillChange. send ( )
6763 }
64+ . store ( in: & cancellables)
65+
6866 let activeEditor = controller? . workspace? . editorManager? . activeEditor
69- activeEditorCancellable = activeEditor? . objectWillChange. sink { [ weak self] in
67+ activeEditor? . objectWillChange. sink { [ weak self] in
68+ self ? . objectWillChange. send ( )
69+ }
70+ . store ( in: & cancellables)
71+
72+ controller? . workspace? . taskManager? . objectWillChange. sink { [ weak self] in
7073 self ? . objectWillChange. send ( )
7174 }
75+ . store ( in: & cancellables)
76+
7277 self . objectWillChange. send ( )
7378 }
7479 }
0 commit comments