diff --git a/platform/apple/Sources/LUIAppleBackend/LUISparseScrollProbe.swift b/platform/apple/Sources/LUIAppleBackend/LUISparseScrollProbe.swift index 5081416c..66151cd6 100644 --- a/platform/apple/Sources/LUIAppleBackend/LUISparseScrollProbe.swift +++ b/platform/apple/Sources/LUIAppleBackend/LUISparseScrollProbe.swift @@ -111,8 +111,8 @@ import SwiftUI } if let responder, responder.isDescendant(of: document) { let id: Int? - if responder === focusedView { - id = focusedRow.flatMap { state?.contains($0) == true ? $0 : nil } + if responder === focusedView, let row = focusedRow, state?.contains(row) == true { + id = row } else { let frame = responder.convert(responder.bounds, to: document) id = state?.row(at: frame.midY) diff --git a/platform/apple/Tests/LUIAppleBackendTests/LUISparseVirtualBridgeTests.swift b/platform/apple/Tests/LUIAppleBackendTests/LUISparseVirtualBridgeTests.swift index 29f577c0..23bb5db6 100644 --- a/platform/apple/Tests/LUIAppleBackendTests/LUISparseVirtualBridgeTests.swift +++ b/platform/apple/Tests/LUIAppleBackendTests/LUISparseVirtualBridgeTests.swift @@ -53,6 +53,8 @@ } let native = try #require(field(window.contentView!)) native.selectText(nil) + let editor = try #require(native.currentEditor() as? NSTextView) + try #require(window.firstResponder === editor) while !sparseWirePayloads.contains(where: { $0.0 == 20 && $0.2.contains("\(row)") }) && ContinuousClock.now < deadline {