Complete rewrite of accessibility support. Instead of flat AXTextArea
on EmacsView, implements proper tree with virtual elements:
EmacsWindow (AXWindow)
└── EmacsView (AXGroup)
├── EmacsAccessibilityBuffer (AXTextArea) — window 1
├── EmacsAccessibilityBuffer (AXTextArea) — window 2
└── ...
Each EmacsAccessibilityBuffer maps to one Emacs window and exposes:
- Buffer text via glyph row iteration (accurate, handles overlays)
- Visual line navigation (glyph_row vpos)
- Cursor tracking with glyph charpos mapping
- Hit testing (accessibilityRangeForPosition:)
- Selection range with active mark
- Screen geometry via pixel coordinate conversion
- Rich typing echo (kAXTextEditTypeTyping userInfo)
- UAZoomChangeFocus for Zoom
Dynamic tree rebuilt on each redisplay cycle from FRAME_ROOT_WINDOW.
Notifications on correct virtual elements (not container view).
3 review cycles (scores: 62 → 68 → 82), plus manual fixes for
hit testing and selection range.
25 KiB
25 KiB