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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user