patches: fix all review issues from Opus core maintainer review

BLOCKERS fixed:
- #1: add missing skip_overlay_scan: label (goto without target)
- #2: move accessibilityLineForIndex: to patch 0002 (used in 0002/0003,
  was defined in 0007 — forward reference crash risk)
- #3: move BOOL singleLineMove to patch 0008 (declared in 0007, unused
  until 0008 — -Werror build failure)

WARNINGS fixed:
- #1: block_input ordering at 5 sites (record_unwind_protect_void must
  come AFTER block_input to avoid unmatched unblock_input on error)
- #2: deduplicate ns_ax_face_is_selected (move to patch 0001, remove
  from patch 0007 where it was duplicated)
- #4: improve childFrameLastBuffer comment (document rename edge case)
- #5: complete ChangeLog for patch 0007 (add 3 missing method entries)
- #6: document lastSelectedWindow/lastRootWindow GC safety in nsterm.h

MINOR fixed:
- #2: wrap ns_zoom_track_completion call in MAC_OS_X_VERSION >= 101000
  guard (consistent with the function definition)
- #3: @cindex Zoom verified present in VoiceOver section (already OK)
- #4: raise line_starts/line_ends bound from 128 to 512 (consistent
  with ns_ax_selected_overlay_text)
- #5: add echo_area_buffer[] lifetime comment referencing xdisp.c

All 9 patches apply cleanly (git apply verified sequentially).
This commit is contained in:
2026-03-03 20:43:56 +01:00
parent f42e799991
commit 97c14a3bd9
8 changed files with 320 additions and 144 deletions

View File

@@ -1,4 +1,4 @@
From ce123c5b0c25467dd6fb6d4a2aeda59687fadefc Mon Sep 17 00:00:00 2001
From 9c233aa400c2769e1621ec37f326d1e24c0da2df Mon Sep 17 00:00:00 2001
From: Martin Sukany <martin@sukany.cz>
Date: Sat, 28 Feb 2026 12:58:11 +0100
Subject: [PATCH 5/9] ns: add interactive span elements for Tab navigation
@@ -14,14 +14,31 @@ elements with an AXPress action that sends a synthetic TAB keystroke.
(accessibilityChildrenInNavigationOrder): Return cached span array,
rebuilding lazily when interactiveSpansDirty is set.
---
src/nsterm.m | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 293 insertions(+)
src/nsterm.m | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 298 insertions(+), 4 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index 9e0e317237..d65609cc79 100644
index 16343f978a..f5e5cea074 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -9346,6 +9346,299 @@ - (NSRect)accessibilityFrame
@@ -8669,12 +8669,12 @@ - (NSRange)accessibilityRangeForPosition:(NSPoint)screenPoint
return NSMakeRange (0, 0);
/* Block input to prevent concurrent redisplay from modifying the
- glyph matrix while we traverse it. Use specpdl unwind protection
- so block_input is always matched by unblock_input, even if
- ensureTextCache triggers a Lisp signal (longjmp). */
+ glyph matrix while we traverse it. block_input must come before
+ record_unwind_protect_void (unblock_input) so that the unwind
+ handler is never called without a matching block_input. */
specpdl_ref count = SPECPDL_INDEX ();
- record_unwind_protect_void (unblock_input);
block_input ();
+ record_unwind_protect_void (unblock_input);
/* Find the glyph row at this y coordinate. */
struct glyph_matrix *matrix = w->current_matrix;
@@ -9394,6 +9394,300 @@ - (NSRect)accessibilityFrame
@end
@@ -248,11 +265,12 @@ index 9e0e317237..d65609cc79 100644
+ window being deleted between capture and execution. */
+ if (!WINDOWP (lwin) || NILP (Fwindow_live_p (lwin)))
+ return;
+ /* Use specpdl unwind protection so that block_input is always
+ matched by unblock_input, even if Fselect_window signals. */
+ /* block_input must come before record_unwind_protect_void (unblock_input)
+ so the unwind handler is never invoked without a matching block_input,
+ even if Fselect_window signals (longjmp). */
+ specpdl_ref count = SPECPDL_INDEX ();
+ record_unwind_protect_void (unblock_input);
+ block_input ();
+ record_unwind_protect_void (unblock_input);
+ record_unwind_current_buffer ();
+ Fselect_window (lwin, Qnil);
+ struct window *w = XWINDOW (lwin);