Bug 1 (crash): postEchoAreaAnnouncementIfNeeded called Fbuffer_string() without block_input, allowing timer events to interleave with Lisp calls and corrupt buffer state. Added block_input/unblock_input via record_unwind_protect_void. Also removed unpaired unblock_input() in postCompletionAnnouncementForBuffer (patch 0003) that became a double-unblock after patch 0008 added block_input + unwind protect. Bug 2 (cursor sync): VoiceOver browse cursor did not follow Emacs keyboard cursor because SelectedTextChanged with discontiguous direction alone is not sufficient for VoiceOver to re-anchor. Added NSAccessibilityFocusedUIElementChangedNotification post when Emacs moves the cursor across a line boundary, forcing VoiceOver to re-query accessibilitySelectedTextRange. Bug 3 (word off-by-one): Evil w (next-word) read the previous word instead of the destination word. VO auto-speech from SelectedTextChanged with direction=next+granularity=word reads the traversed word, not the arrived-at word. Added explicit word announcement (like char moves) that reads the word AT the new cursor position using whitespace-delimited word boundary scan.
20 KiB
20 KiB