v13 patch: VoiceOver virtual accessibility tree

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.
This commit is contained in:
2026-02-25 23:26:59 +01:00
parent f5ecc44871
commit 60afee0aec