patches: restructure per reviewer feedback
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
This commit is contained in:
@@ -6,9 +6,41 @@ Date: 2026-02-28
|
||||
|
||||
Environment
|
||||
-----------
|
||||
Host: CM2D4G-A9635005 (macOS)
|
||||
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:
|
||||
@@ -37,108 +69,77 @@ No warnings related to accessibility code.
|
||||
---------------
|
||||
PASS — emacs -Q starts without errors or warnings.
|
||||
|
||||
4. Zoom Cursor Tracking
|
||||
------------------------
|
||||
PASS — UAZoomChangeFocus integration working correctly:
|
||||
- Typing in buffer: cursor tracked, Zoom follows OK
|
||||
- M-x: Zoom moves focus to minibuffer OK
|
||||
- M-x list- TAB M-v: switches to *Completions* buffer,
|
||||
TAB cycles focus across completion candidates OK
|
||||
- C-x 2, C-x 2, C-x 3 (multiple splits), then C-x o
|
||||
cycling: Zoom focus correctly follows between windows OK
|
||||
|
||||
5. Documentation
|
||||
----------------
|
||||
PASS — Texinfo node accessible via C-h i g (emacs)VoiceOver Accessibility.
|
||||
Node correctly linked from macOS appendix menu.
|
||||
|
||||
6. VoiceOver — Basic Navigation
|
||||
4. VoiceOver — Basic Navigation
|
||||
--------------------------------
|
||||
PASS — VoiceOver active (Cmd+F5):
|
||||
- Buffer name announced correctly on focus OK
|
||||
- Typing: each character announced as typed OK
|
||||
- Arrow keys / C-n / C-p: line-by-line navigation,
|
||||
current line announced OK
|
||||
- Word navigation: reads full current word OK
|
||||
- M-x: switches to minibuffer, announces "minibuffer" OK
|
||||
- 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
|
||||
|
||||
7. VoiceOver — Completions
|
||||
5. VoiceOver — Completions
|
||||
---------------------------
|
||||
PASS — Completion buffer interaction:
|
||||
- M-x list-* then M-v to switch to *Completions*:
|
||||
buffer content read correctly OK
|
||||
- TAB cycling in *Completions*: announces only the
|
||||
current candidate (interactive span focus) OK
|
||||
- M-x, partial command, Tab → *Completions* OK
|
||||
- Tab cycling: announces each candidate OK
|
||||
- No double-speech OK
|
||||
|
||||
8. VoiceOver — Window Switching
|
||||
6. VoiceOver — Window Switching
|
||||
--------------------------------
|
||||
PASS — Multiple windows (C-x 2, C-x 3, C-x o cycling):
|
||||
- Announces current buffer name and content on switch OK
|
||||
- Begins reading buffer content automatically OK
|
||||
- User action (typing, navigation) correctly interrupts
|
||||
reading and announces new action instead OK
|
||||
- Notification priority/preemption working as designed OK
|
||||
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
|
||||
|
||||
9. VoiceOver — Full Buffer Reading
|
||||
7. VoiceOver — Full Buffer Reading
|
||||
-----------------------------------
|
||||
PASS — VO+A reads entire buffer including off-screen content.
|
||||
- Cursor synchronization between Emacs and VoiceOver
|
||||
virtual cursor working correctly OK
|
||||
|
||||
10. VoiceOver — Accessibility Tree
|
||||
8. VoiceOver — Accessibility Tree
|
||||
-----------------------------------
|
||||
PASS — Virtual element tree dynamically maintained:
|
||||
- New AX element created for each open buffer OK
|
||||
- Minibuffer element present and readable OK
|
||||
- Mode-line elements present per buffer, readable via
|
||||
VoiceOver virtual navigation OK
|
||||
- Tree correctly updates when windows are split/closed OK
|
||||
- Buffer elements created per window OK
|
||||
- Mode-line elements readable via VO navigation OK
|
||||
- Tree updates on split/close OK
|
||||
|
||||
11. VoiceOver — Selection
|
||||
9. VoiceOver — Selection
|
||||
--------------------------
|
||||
PASS — C-SPC + cursor movement:
|
||||
- Announces "selected" with region feedback OK
|
||||
PASS — C-SPC + movement: announces "selected" with region.
|
||||
|
||||
12. VoiceOver — Org-mode Invisible Text
|
||||
10. VoiceOver — Org-mode Invisible Text
|
||||
----------------------------------------
|
||||
PASS — Org-mode folding (Tab on headings):
|
||||
- Folded: hidden text NOT read by VoiceOver OK
|
||||
- Unfolded: full content read correctly OK
|
||||
- Invisible text filtering (TEXT_PROP_MEANS_INVISIBLE)
|
||||
working as designed OK
|
||||
PASS — Folded text NOT read, unfolded text read correctly.
|
||||
|
||||
13. ERT — ns-accessibility-enabled Variable
|
||||
11. ERT — ns-accessibility-enabled Variable
|
||||
--------------------------------------------
|
||||
PASS — Ran 1 test, 1 result as expected:
|
||||
- ns-accessibility-enabled is bound OK
|
||||
- ns-accessibility-enabled defaults to t OK
|
||||
(ERT 1/1 passed, 2026-02-28 11:45:55 CET)
|
||||
PASS — ns-accessibility-enabled bound, defaults to t.
|
||||
|
||||
14. VoiceOver — Overlay Completion (Patch 0007)
|
||||
12. VoiceOver — Overlay Completion (Patch 0007)
|
||||
------------------------------------------------
|
||||
PASS — Vertico minibuffer overlay completion:
|
||||
- Vertico candidates announced on C-n / C-p navigation OK
|
||||
- Selected candidate face detected (vertico-current) OK
|
||||
- Deduplication: same candidate not re-announced OK
|
||||
- Zoom tracks selected candidate in minibuffer
|
||||
(overlayZoomRect / overlayZoomActive lifecycle) OK
|
||||
- overlayZoomActive cleared on text input OK
|
||||
- hl-line-mode compatibility: cursor movement in dired
|
||||
and read-only buffers correctly announces lines
|
||||
(textDidChange flag decouples modiff branch from
|
||||
cursor-move branch) OK
|
||||
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
|
||||
|
||||
15. VoiceOver — Child Frame Completion (Patch 0008)
|
||||
13. VoiceOver — Child Frame Completion (Patch 0008)
|
||||
----------------------------------------------------
|
||||
PASS — Corfu child frame completion:
|
||||
- Corfu popup candidates announced via VoiceOver OK
|
||||
- Selected candidate face detected (corfu-current) OK
|
||||
- Zoom tracks selected candidate in child frame
|
||||
(direct UAZoomChangeFocus) OK
|
||||
- No Emacs freeze (re-entrance guard before child frame
|
||||
dispatch, buffer switch with unbind_to on all paths) OK
|
||||
- Focus restored to parent buffer after corfu closes
|
||||
(childFrameCompletionActive flag + FOR_EACH_FRAME
|
||||
visibility check + FocusedUIElementChanged) OK
|
||||
- Non-completion child frames skipped (10KB buffer limit) OK
|
||||
- specpdl_ref type used correctly (not ptrdiff_t) OK
|
||||
- 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.
|
||||
|
||||
Reference in New Issue
Block a user