Major changes: 1. Zoom separated into standalone patch 0000 - UAZoomChangeFocus in ns_draw_window_cursor - Fallback in ns_update_end for window-switch tracking - No overlayZoomActive (source of split/switch/move bug) 2. VoiceOver patches 0001-0008 are now Zoom-free - All UAZoom*, overlayZoom*, kUAZoomFocus references removed - lastAccessibilityCursorRect kept for VoiceOver bounds queries - Commit messages cleaned of Zoom references 3. README.txt and TESTING.txt rewritten for new structure Addresses reviewer (Stéphane Marks) feedback: - Keep Zoom patch separate from VoiceOver work - Design discussion needed for non-Zoom patches - Performance: ns-accessibility-enabled=nil for zero overhead
146 lines
5.3 KiB
Plaintext
146 lines
5.3 KiB
Plaintext
VoiceOver Accessibility Patch Series — Testing Evidence
|
|
=======================================================
|
|
|
|
Tester: Martin Sukany
|
|
Date: 2026-02-28
|
|
|
|
Environment
|
|
-----------
|
|
Host: CM2D4G-A9635005 (macOS 14)
|
|
Base: emacs master (upstream HEAD at time of test)
|
|
|
|
|
|
PATCH A: ZOOM (0000)
|
|
=====================
|
|
|
|
1. Patch Application
|
|
--------------------
|
|
PASS — Standalone Zoom patch applies cleanly via git-am.
|
|
No conflicts, no warnings.
|
|
|
|
2. Build
|
|
--------
|
|
PASS — Full NS (Cocoa) build completed successfully.
|
|
No warnings related to Zoom code.
|
|
|
|
3. Zoom Cursor Tracking
|
|
------------------------
|
|
PASS — UAZoomChangeFocus integration:
|
|
- Typing in buffer: Zoom tracks cursor OK
|
|
- M-x: Zoom moves to minibuffer OK
|
|
- C-x 2, C-x o cycling: Zoom follows across split windows OK
|
|
- C-x 2, C-x o, C-p: Zoom follows cursor up after switch OK
|
|
(ns_update_end fallback ensures tracking)
|
|
|
|
4. No-Zoom Overhead
|
|
--------------------
|
|
PASS — UAZoomEnabled() returns false when Zoom is off.
|
|
Single function call overhead per redisplay cycle (negligible).
|
|
|
|
|
|
PATCH B: VOICEOVER (0001-0008)
|
|
===============================
|
|
|
|
1. Patch Application
|
|
--------------------
|
|
PASS — All 8 patches applied cleanly via git-am:
|
|
0001 ns: add accessibility base classes and text extraction
|
|
0002 ns: implement buffer accessibility element (core protocol)
|
|
0003 ns: add buffer notification dispatch and mode-line element
|
|
0004 ns: add interactive span elements for Tab navigation
|
|
0005 ns: integrate accessibility with EmacsView and redisplay
|
|
0006 doc: add VoiceOver accessibility section to macOS appendix
|
|
0007 ns: announce overlay completion candidates for VoiceOver
|
|
0008 ns: announce child frame completion candidates for VoiceOver
|
|
|
|
No conflicts, no warnings.
|
|
|
|
2. Build
|
|
--------
|
|
PASS — Full NS (Cocoa) build completed successfully:
|
|
./autogen.sh OK
|
|
./configure --with-ns OK
|
|
make -j12 OK
|
|
make install OK
|
|
|
|
No warnings related to accessibility code.
|
|
|
|
3. Basic Launch
|
|
---------------
|
|
PASS — emacs -Q starts without errors or warnings.
|
|
|
|
4. VoiceOver — Basic Navigation
|
|
--------------------------------
|
|
PASS — VoiceOver active (Cmd+F5):
|
|
- Buffer name announced on focus OK
|
|
- Typing: each character announced OK
|
|
- Arrow keys / C-n / C-p: line navigation announced OK
|
|
- Word navigation (M-f / M-b): word announced OK
|
|
- M-x: switches to minibuffer, announces "minibuffer" OK
|
|
|
|
5. VoiceOver — Completions
|
|
---------------------------
|
|
PASS — Completion buffer interaction:
|
|
- M-x, partial command, Tab → *Completions* OK
|
|
- Tab cycling: announces each candidate OK
|
|
- No double-speech OK
|
|
|
|
6. VoiceOver — Window Switching
|
|
--------------------------------
|
|
PASS — Multiple windows (C-x 2, C-x 3, C-x o):
|
|
- Announces buffer name and content on switch OK
|
|
- Notification priority/preemption working OK
|
|
|
|
7. VoiceOver — Full Buffer Reading
|
|
-----------------------------------
|
|
PASS — VO+A reads entire buffer including off-screen content.
|
|
|
|
8. VoiceOver — Accessibility Tree
|
|
-----------------------------------
|
|
PASS — Virtual element tree dynamically maintained:
|
|
- Buffer elements created per window OK
|
|
- Mode-line elements readable via VO navigation OK
|
|
- Tree updates on split/close OK
|
|
|
|
9. VoiceOver — Selection
|
|
--------------------------
|
|
PASS — C-SPC + movement: announces "selected" with region.
|
|
|
|
10. VoiceOver — Org-mode Invisible Text
|
|
----------------------------------------
|
|
PASS — Folded text NOT read, unfolded text read correctly.
|
|
|
|
11. ERT — ns-accessibility-enabled Variable
|
|
--------------------------------------------
|
|
PASS — ns-accessibility-enabled bound, defaults to t.
|
|
|
|
12. VoiceOver — Overlay Completion (Patch 0007)
|
|
------------------------------------------------
|
|
PASS — Vertico overlay completion:
|
|
- Candidates announced on C-n / C-p OK
|
|
- Selected face detected (vertico-current) OK
|
|
- Deduplication working OK
|
|
- hl-line-mode compatibility (textDidChange flag) OK
|
|
|
|
13. VoiceOver — Child Frame Completion (Patch 0008)
|
|
----------------------------------------------------
|
|
PASS — Corfu child frame completion:
|
|
- Candidates announced via VoiceOver OK
|
|
- Selected face detected (corfu-current) OK
|
|
- No Emacs freeze (re-entrance guard) OK
|
|
- Focus restored to parent after popup closes OK
|
|
- Non-completion child frames skipped (10KB limit) OK
|
|
|
|
14. Performance — ns-accessibility-enabled=nil
|
|
-----------------------------------------------
|
|
PASS — When set to nil:
|
|
- No virtual elements built OK
|
|
- No notifications posted OK
|
|
- ns_draw_window_cursor skips cursor rect store OK
|
|
- Zero measurable overhead OK
|
|
|
|
15. Documentation
|
|
-----------------
|
|
PASS — Texinfo node accessible via C-h i g (emacs)VoiceOver.
|
|
etc/NEWS entry present and accurate.
|