patches: QA round 2 PASS (93.5/100) — final indentation fix + ChangeLog commit message
This commit is contained in:
@@ -1,24 +1,34 @@
|
|||||||
From 3e49c04ee6996a95ead094cae9dff5e7b81a2702 Mon Sep 17 00:00:00 2001
|
From a194f7d30770478d476720f86f39c9878aa63e79 Mon Sep 17 00:00:00 2001
|
||||||
From: Martin Sukany <martin@sukany.cz>
|
From: Martin Sukany <martin@sukany.cz>
|
||||||
Date: Fri, 27 Feb 2026 13:34:22 +0100
|
Date: Fri, 27 Feb 2026 13:38:25 +0100
|
||||||
Subject: [PATCH] ns: implement VoiceOver accessibility (AXBoundsForRange, line
|
Subject: [PATCH] ns: implement VoiceOver accessibility (AXBoundsForRange, line
|
||||||
nav, completions, interactive spans)
|
nav, completions, interactive spans)
|
||||||
|
|
||||||
* src/nsterm.h: Add EmacsAccessibilityElement, EmacsAccessibilityBuffer,
|
* src/nsterm.h (EmacsAccessibilityElement): New base class for virtual
|
||||||
EmacsAccessibilityModeLine, EmacsAccessibilityInteractiveSpan classes;
|
accessibility elements.
|
||||||
ns_ax_visible_run struct; new EmacsView ivars for AX tree.
|
(EmacsAccessibilityBuffer): AXTextArea/AXTextField per Emacs window with
|
||||||
|
cached text, visible runs, and interactive span support.
|
||||||
|
(EmacsAccessibilityModeLine): AXStaticText exposing mode line content.
|
||||||
|
(EmacsAccessibilityInteractiveSpan): Focusable element for buttons,
|
||||||
|
links, completion candidates, and keymap overlays.
|
||||||
|
(ns_ax_visible_run): Maps contiguous visible buffer ranges to AX string
|
||||||
|
indices, skipping invisible text.
|
||||||
|
|
||||||
* src/nsterm.m: Full VoiceOver/Zoom support:
|
* src/nsterm.m (ns_ax_buffer_text): Build accessibility string from
|
||||||
- AXBoundsForRange for macOS Zoom cursor tracking (UAZoomChangeFocus)
|
buffer content, skipping text hidden via TEXT_PROP_MEANS_INVISIBLE.
|
||||||
- EmacsAccessibilityBuffer per window (AXTextArea/AXTextField for minibuffer)
|
(ns_ax_event_is_line_nav_key): Detect C-n/C-p/Tab/backtab for line
|
||||||
- Hybrid notification strategy: SelectedTextChanged for interruption +
|
granularity forcing.
|
||||||
braille; AnnouncementRequested for speech (char AT point, line text)
|
(ns_ax_scan_interactive_spans): Forward scan for interactive text
|
||||||
- Word granularity detection for M-f/M-b (same-line multi-char moves)
|
properties (widget, button, follow-link, org-link, completion, keymap).
|
||||||
- Interactive span Tab navigation (buttons, links, completions, org-links)
|
(ns_ax_completion_string_from_prop): Handle completion--string as plain
|
||||||
- 4-fallback completion announcement chain for non-focused buffers
|
string or annotated cons list.
|
||||||
- Thread-safe: AX getters use cached data built on main thread
|
(postAccessibilityUpdates): Re-entrance-guarded dispatcher called from
|
||||||
- GC-safe: all symbols registered via DEFSYM in syms_of_nsterm
|
ns_update_end; rebuilds AX tree on window layout changes.
|
||||||
- Invisible text skipping via TEXT_PROP_MEANS_INVISIBLE
|
(postAccessibilityNotificationsForFrame:): Hybrid notification strategy:
|
||||||
|
SelectedTextChanged for word/line/selection (VoiceOver reads correctly);
|
||||||
|
AnnouncementRequested for character moves (char AT point, correct for
|
||||||
|
evil block-cursor mode). Non-focused buffer completion announcements
|
||||||
|
via 4-step fallback chain.
|
||||||
---
|
---
|
||||||
src/nsterm.h | 108 ++
|
src/nsterm.h | 108 ++
|
||||||
src/nsterm.m | 2700 +++++++++++++++++++++++++++++++++++++++++++++++---
|
src/nsterm.m | 2700 +++++++++++++++++++++++++++++++++++++++++++++++---
|
||||||
@@ -158,7 +168,7 @@ index 7c1ee4c..6455547 100644
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/nsterm.m b/src/nsterm.m
|
diff --git a/src/nsterm.m b/src/nsterm.m
|
||||||
index 932d209..7c50716 100644
|
index 932d209..5cd6ade 100644
|
||||||
--- a/src/nsterm.m
|
--- a/src/nsterm.m
|
||||||
+++ b/src/nsterm.m
|
+++ b/src/nsterm.m
|
||||||
@@ -46,6 +46,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
@@ -46,6 +46,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
||||||
|
|||||||
Reference in New Issue
Block a user