Root cause (confirmed via WebKit/Chromium source): ValueChanged (edit) and SelectedTextChanged (cursor move) are MUTUALLY EXCLUSIVE — apps must never send both for the same user action. VoiceOver enters 'typing mode' on Edit notifications and suppresses/ignores concurrent SelectionMove notifications, causing the cursor to appear stuck. Fix: (1) Update cachedPoint inside the modiff branch so the selection-move check doesn't trigger for edit-caused point changes. (2) Change 'if' to 'else if' for explicit mutual exclusion. Source: WebKit AXObjectCacheMac.mm — postTextStateChangePlatformNotification vs postTextSelectionChangePlatformNotification are separate code paths that never fire for the same event.
33 KiB
33 KiB