@@ -31,6 +31,7 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
3131 private var lastSelection : Set < DatabaseTreeTableRef > = [ ]
3232 private var isApplyingExpansion = false
3333 private var isSyncingSelection = false
34+ private var isReloading = false
3435 private var hasRenderedOnce = false
3536 private var reconcileScheduled = false
3637 private var observationGeneration = 0
@@ -78,10 +79,8 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
7879 if !hasRenderedOnce {
7980 hasRenderedOnce = true
8081 refresh ( )
81- beginObserving ( )
8282 } else if changed {
8383 refresh ( )
84- beginObserving ( )
8584 }
8685 }
8786
@@ -119,7 +118,6 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
119118 Task { @MainActor in
120119 self . reconcileScheduled = false
121120 self . refresh ( )
122- self . beginObserving ( )
123121 }
124122 }
125123
@@ -142,10 +140,13 @@ final class DatabaseTreeOutlineCoordinator: NSObject {
142140
143141 private func refresh( ) {
144142 guard let outlineView else { return }
143+ isReloading = true
145144 childrenCache. removeAll ( )
146145 outlineView. reloadData ( )
147146 applyDesiredExpansion ( )
148147 syncSelectionToModel ( )
148+ isReloading = false
149+ beginObserving ( )
149150 }
150151
151152 // MARK: - Node building
@@ -522,7 +523,7 @@ extension DatabaseTreeOutlineCoordinator: NSOutlineViewDelegate {
522523 }
523524
524525 func outlineViewSelectionDidChange( _ notification: Notification ) {
525- guard !isSyncingSelection else { return }
526+ guard !isSyncingSelection, !isReloading else { return }
526527 let refs = Set ( selectedRefs ( ) )
527528 if let added = SelectionDelta . singleAddition ( old: lastSelection, new: refs) {
528529 open ( added, activateGridFocus: false )
0 commit comments