patches: address all maintainer review issues
- Issue 1: Add explicit ApplicationServices import for UAZoomEnabled/ UAZoomChangeFocus (was implicit via Carbon.h, now explicit) - Issue 2: Rename FOR_EACH_FRAME variable 'frames' -> 'frame' (plural was misleading; matches Emacs convention) - Issue 3: Move unblock_input before ObjC calls in postCompletionAnnouncementForBuffer: to avoid holding block_input during @synchronized operations - Issue 4: Fix DEFVAR_BOOL doc and Texinfo: initial value is nil, not t; auto-detection sets it at startup - Issue 5: Replace magic 10000 with NS_AX_MAX_COMPLETION_BUFFER_CHARS constant with explanatory comment - Issue 6: Add comment to lineStartOffsets loop explaining it is gated on BUF_CHARS_MODIFF and never runs on the hot path - Issue 8: Rewrite all 9 commit messages to GNU ChangeLog format with '* file (symbol): description' entries - Issue 9: Break 81-char @interface line in nsterm.h - Issue 10: Add WINDOWP/BUFFERP guards before dereferencing cf->selected_window and cw->contents in ns_zoom_find_child_frame_candidate - Issue 11: Fix @pxref -> @xref at sentence start in macos.texi
This commit is contained in:
@@ -1,43 +1,42 @@
|
||||
From 23f582e52ede92fb6d04bfd0062557757bea0971 Mon Sep 17 00:00:00 2001
|
||||
From 63788743619d25f4f41cb90b2eea5b48e0fcbc15 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Sukany <martin@sukany.cz>
|
||||
Date: Sat, 28 Feb 2026 12:58:11 +0100
|
||||
Subject: [PATCH 1/8] ns: add accessibility base classes and text extraction
|
||||
|
||||
Add the foundation for macOS VoiceOver accessibility in the NS
|
||||
(Cocoa) port. No existing code paths are modified.
|
||||
Add the foundation for macOS VoiceOver accessibility in the NS (Cocoa)
|
||||
port. No existing code paths are modified.
|
||||
|
||||
* src/nsterm.h (ns_ax_visible_run): New struct.
|
||||
(EmacsAccessibilityElement): New base class.
|
||||
(EmacsAccessibilityElement): New base Objective-C class.
|
||||
(EmacsAccessibilityBuffer, EmacsAccessibilityModeLine)
|
||||
(EmacsAccessibilityInteractiveSpan): Forward declarations.
|
||||
(EmacsAccessibilityBuffer(Notifications)): New category interface.
|
||||
(EmacsAccessibilityBuffer(InteractiveSpans)): New category interface.
|
||||
(EmacsAXSpanType): New enum.
|
||||
(EmacsView): New ivars for accessibility state.
|
||||
(EmacsAccessibilityInteractiveSpan): Forward-declare new classes.
|
||||
(EmacsAXSpanType): New enum for interactive span types.
|
||||
(EmacsView): New ivars for accessibility element tree.
|
||||
* src/nsterm.m: Include intervals.h for TEXT_PROP_MEANS_INVISIBLE.
|
||||
|
||||
(ns_ax_buffer_text, ns_ax_mode_line_text, ns_ax_frame_for_range)
|
||||
(ns_ax_completion_string_from_prop, ns_ax_window_buffer_object)
|
||||
(ns_ax_window_end_charpos, ns_ax_text_prop_at)
|
||||
(ns_ax_next_prop_change, ns_ax_get_span_label)
|
||||
(ns_ax_post_notification, ns_ax_post_notification_with_info): New
|
||||
functions.
|
||||
(ns_ax_buffer_text): New function; build visible-text string and
|
||||
run array for a window, skipping invisible character regions.
|
||||
(ns_ax_mode_line_text): New function; extract mode-line text.
|
||||
(ns_ax_frame_for_range): New function; map charpos range to screen
|
||||
rect via glyph matrix.
|
||||
(ns_ax_completion_string_from_prop)
|
||||
(ns_ax_window_buffer_object, ns_ax_window_end_charpos)
|
||||
(ns_ax_text_prop_at, ns_ax_next_prop_change)
|
||||
(ns_ax_get_span_label, ns_ax_post_notification)
|
||||
(ns_ax_post_notification_with_info): New helper functions.
|
||||
(EmacsAccessibilityElement): Implement base class.
|
||||
(syms_of_nsterm): Register accessibility DEFSYM and DEFVAR
|
||||
ns-accessibility-enabled.
|
||||
|
||||
Tested on macOS 14 Sonoma with VoiceOver 10. Builds cleanly;
|
||||
no functional change (dead code until patch 5/6 wires it in).
|
||||
(syms_of_nsterm): Register accessibility DEFSYMs. Add DEFVAR_BOOL
|
||||
ns-accessibility-enabled with corrected doc: initial value is nil,
|
||||
set non-nil automatically when an AT is detected at startup.
|
||||
---
|
||||
src/nsterm.h | 129 ++++++++++++++
|
||||
src/nsterm.h | 130 +++++++++++++++
|
||||
src/nsterm.m | 462 ++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 588 insertions(+), 3 deletions(-)
|
||||
2 files changed, 589 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/nsterm.h b/src/nsterm.h
|
||||
index ea6e7ba..6e830de 100644
|
||||
index ea6e7ba..7adbb92 100644
|
||||
--- a/src/nsterm.h
|
||||
+++ b/src/nsterm.h
|
||||
@@ -453,6 +453,122 @@ enum ns_return_frame_mode
|
||||
@@ -453,6 +453,123 @@ enum ns_return_frame_mode
|
||||
@end
|
||||
|
||||
|
||||
@@ -83,7 +82,8 @@ index ea6e7ba..6e830de 100644
|
||||
+} ns_ax_visible_run;
|
||||
+
|
||||
+/* Virtual AXTextArea element — one per visible Emacs window (buffer). */
|
||||
+@interface EmacsAccessibilityBuffer : EmacsAccessibilityElement <NSAccessibility>
|
||||
+@interface EmacsAccessibilityBuffer
|
||||
+ : EmacsAccessibilityElement <NSAccessibility>
|
||||
+{
|
||||
+ ns_ax_visible_run *visibleRuns;
|
||||
+ NSUInteger visibleRunCount;
|
||||
@@ -160,7 +160,7 @@ index ea6e7ba..6e830de 100644
|
||||
/* ==========================================================================
|
||||
|
||||
The main Emacs view
|
||||
@@ -471,6 +587,12 @@ enum ns_return_frame_mode
|
||||
@@ -471,6 +588,12 @@ enum ns_return_frame_mode
|
||||
#ifdef NS_IMPL_COCOA
|
||||
char *old_title;
|
||||
BOOL maximizing_resize;
|
||||
@@ -173,7 +173,7 @@ index ea6e7ba..6e830de 100644
|
||||
#endif
|
||||
BOOL font_panel_active;
|
||||
NSFont *font_panel_result;
|
||||
@@ -534,6 +656,13 @@ enum ns_return_frame_mode
|
||||
@@ -534,6 +657,13 @@ enum ns_return_frame_mode
|
||||
- (void)windowWillExitFullScreen;
|
||||
- (void)windowDidExitFullScreen;
|
||||
- (void)windowDidBecomeKey;
|
||||
@@ -188,7 +188,7 @@ index ea6e7ba..6e830de 100644
|
||||
|
||||
|
||||
diff --git a/src/nsterm.m b/src/nsterm.m
|
||||
index 5498d7a..e516946 100644
|
||||
index fc75910..e9ebac0 100644
|
||||
--- a/src/nsterm.m
|
||||
+++ b/src/nsterm.m
|
||||
@@ -46,6 +46,7 @@ Updated by Christian Limpach (chris@nice.ch)
|
||||
@@ -199,7 +199,7 @@ index 5498d7a..e516946 100644
|
||||
#include "systime.h"
|
||||
#include "character.h"
|
||||
#include "xwidget.h"
|
||||
@@ -7192,6 +7193,430 @@ - (BOOL)fulfillService: (NSString *)name withArg: (NSString *)arg
|
||||
@@ -7209,6 +7210,430 @@ - (BOOL)fulfillService: (NSString *)name withArg: (NSString *)arg
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -630,7 +630,7 @@ index 5498d7a..e516946 100644
|
||||
/* ==========================================================================
|
||||
|
||||
EmacsView implementation
|
||||
@@ -11648,6 +12073,28 @@ Convert an X font name (XLFD) to an NS font name.
|
||||
@@ -11665,6 +12090,28 @@ Convert an X font name (XLFD) to an NS font name.
|
||||
DEFSYM (Qns_drag_operation_generic, "ns-drag-operation-generic");
|
||||
DEFSYM (Qns_handle_drag_motion, "ns-handle-drag-motion");
|
||||
|
||||
@@ -659,7 +659,7 @@ index 5498d7a..e516946 100644
|
||||
Fput (Qalt, Qmodifier_value, make_fixnum (alt_modifier));
|
||||
Fput (Qhyper, Qmodifier_value, make_fixnum (hyper_modifier));
|
||||
Fput (Qmeta, Qmodifier_value, make_fixnum (meta_modifier));
|
||||
@@ -11780,7 +12227,7 @@ Convert an X font name (XLFD) to an NS font name.
|
||||
@@ -11797,7 +12244,7 @@ Convert an X font name (XLFD) to an NS font name.
|
||||
doc: /* Non-nil means to use native fullscreen on Mac OS X 10.7 and later.
|
||||
Nil means use fullscreen the old (< 10.7) way. The old way works better with
|
||||
multiple monitors, but lacks tool bar. This variable is ignored on
|
||||
@@ -668,7 +668,7 @@ index 5498d7a..e516946 100644
|
||||
ns_use_native_fullscreen = YES;
|
||||
ns_last_use_native_fullscreen = ns_use_native_fullscreen;
|
||||
|
||||
@@ -11796,10 +12243,19 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with
|
||||
@@ -11813,10 +12260,19 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with
|
||||
This variable is ignored on Mac OS X < 10.7 and GNUstep. */);
|
||||
ns_use_srgb_colorspace = YES;
|
||||
|
||||
@@ -689,7 +689,7 @@ index 5498d7a..e516946 100644
|
||||
ns_use_mwheel_acceleration = YES;
|
||||
|
||||
DEFVAR_LISP ("ns-mwheel-line-height", ns_mwheel_line_height,
|
||||
@@ -11810,7 +12266,7 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with
|
||||
@@ -11827,7 +12283,7 @@ Nil means use fullscreen the old (< 10.7) way. The old way works better with
|
||||
|
||||
DEFVAR_BOOL ("ns-use-mwheel-momentum", ns_use_mwheel_momentum,
|
||||
doc: /* Non-nil means mouse wheel scrolling uses momentum.
|
||||
|
||||
Reference in New Issue
Block a user