@@ -108,9 +108,6 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
108108 var layoutPersistTask : Task < Void , Never > ?
109109
110110 static let rowViewIdentifier = NSUserInterfaceItemIdentifier ( " TableRowView " )
111- internal var pendingDropdownRow : Int = 0
112- internal var pendingDropdownColumn : Int = 0
113- internal weak var pendingDropdownTableView : NSTableView ?
114111 private var rowVisualStateCache : [ Int : RowVisualState ] = [ : ]
115112 private var lastVisualStateCacheVersion : Int = 0
116113 private let largeDatasetThreshold = 5_000
@@ -187,7 +184,7 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
187184 object: nil ,
188185 queue: . main
189186 ) { [ weak self] _ in
190- Task {
187+ Task { @ MainActor [ weak self ] in
191188 guard let self, let tableView = self . tableView else { return }
192189 Self . updateVisibleCellFonts ( tableView: tableView)
193190 }
@@ -263,8 +260,7 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
263260
264261 func applyFullReplace( ) {
265262 guard let tableView else { return }
266- displayCache. removeAll ( )
267- rebuildVisualStateCache ( )
263+ invalidateAllDisplayCaches ( )
268264 updateCache ( )
269265 tableView. reloadData ( )
270266 }
@@ -312,6 +308,11 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
312308 displayCache. removeAll ( )
313309 }
314310
311+ func invalidateAllDisplayCaches( ) {
312+ displayCache. removeAll ( )
313+ rebuildVisualStateCache ( )
314+ }
315+
315316 func updateDisplayFormats( _ formats: [ ValueDisplayFormat ? ] ) {
316317 columnDisplayFormats = formats
317318 displayCache. removeAll ( )
@@ -368,10 +369,10 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
368369 func applyDelta( _ delta: Delta ) {
369370 switch delta {
370371 case . cellChanged( let row, let column) :
371- guard let tableView else { return }
372- let tableColumn = DataGridView . tableColumnIndex ( for: column)
372+ guard let tableView,
373+ let tableColumn = DataGridView . tableColumnIndex ( for: column, in: tableView, schema: identitySchema)
374+ else { return }
373375 guard row >= 0 , row < tableView. numberOfRows else { return }
374- guard tableColumn >= 0 , tableColumn < tableView. numberOfColumns else { return }
375376 invalidateDisplayCache ( forDisplayRow: row, column: column)
376377 rebuildVisualStateCache ( )
377378 tableView. reloadData (
@@ -386,8 +387,11 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
386387 if position. row >= 0 , position. row < tableView. numberOfRows {
387388 rowSet. insert ( position. row)
388389 }
389- let tableColumn = DataGridView . tableColumnIndex ( for: position. column)
390- if tableColumn >= 0 , tableColumn < tableView. numberOfColumns {
390+ if let tableColumn = DataGridView . tableColumnIndex (
391+ for: position. column,
392+ in: tableView,
393+ schema: identitySchema
394+ ) {
391395 colSet. insert ( tableColumn)
392396 }
393397 invalidateDisplayCache ( forDisplayRow: position. row, column: position. column)
@@ -406,7 +410,6 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
406410 applyRemovedRows ( indices)
407411 case . columnsReplaced, . fullReplace:
408412 sortedIDs = nil
409- displayCache. removeAll ( )
410413 applyFullReplace ( )
411414 }
412415 }
@@ -431,8 +434,7 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
431434 }
432435
433436 func invalidateCachesForUndoRedo( ) {
434- displayCache. removeAll ( )
435- rebuildVisualStateCache ( )
437+ invalidateAllDisplayCaches ( )
436438 updateCache ( )
437439 guard let tableView else { return }
438440 let visibleRange = tableView. rows ( in: tableView. visibleRect)
@@ -456,10 +458,10 @@ final class TableViewCoordinator: NSObject, NSTableViewDelegate, NSTableViewData
456458 }
457459
458460 func beginEditing( displayRow: Int , column: Int ) {
459- guard let tableView else { return }
460- let displayCol = DataGridView . tableColumnIndex ( for: column)
461- guard displayRow >= 0 , displayRow < tableView . numberOfRows ,
462- displayCol >= 0 , displayCol < tableView. numberOfColumns else { return }
461+ guard let tableView,
462+ let displayCol = DataGridView . tableColumnIndex ( for: column, in : tableView , schema : identitySchema )
463+ else { return }
464+ guard displayRow >= 0 , displayRow < tableView. numberOfRows else { return }
463465 tableView. scrollRowToVisible ( displayRow)
464466 tableView. selectRowIndexes ( IndexSet ( integer: displayRow) , byExtendingSelection: false )
465467 tableView. editColumn ( displayCol, row: displayRow, with: nil , select: true )
0 commit comments