v9 patch: fix macOS 26 SDK compilation error

Replace extern NSString* declarations with raw string literals
(@"AXTextStateChangeType" etc.) to avoid redeclaration type conflict
with NSAccessibilityConstants.h on macOS 26 Tahoe SDK where these
symbols were added to public headers.
This commit is contained in:
2026-02-25 20:49:12 +01:00
parent 5529418b48
commit 01ea5d1f0a

View File

@@ -1,5 +1,5 @@
From: Martin Sukany <martin@sukany.cz>
Date: Tue, 25 Feb 2026 20:45:00 +0100
Date: Tue, 25 Feb 2026 21:00:00 +0100
Subject: [PATCH] ns: implement macOS Zoom cursor tracking and VoiceOver
support
@@ -25,9 +25,9 @@ Add comprehensive accessibility support for macOS:
FocusedUIElementChanged (window focus)
Ref: https://developer.apple.com/documentation/appkit/nsaccessibilityprotocol
accessibilityFrame returns the view's frame (not cursor rect) to avoid
VoiceOver drawing a duplicate cursor overlay. Cursor position is exposed
only via accessibilityBoundsForRange:.
Uses raw string literals ("AXTextStateChangeType" etc.) for semi-private
notification keys to avoid type conflicts between SDK versions (these
symbols were added to public AppKit headers in macOS 26).
---
diff --git a/src/nsterm.h b/src/nsterm.h
index 7c1ee4c..5e5f61b 100644
@@ -45,22 +45,20 @@ index 7c1ee4c..5e5f61b 100644
/* AppKit-side interface. */
diff --git a/src/nsterm.m b/src/nsterm.m
index 932d209..8dc5915 100644
index 932d209..6bfc080 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -3232,6 +3232,117 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
@@ -3232,6 +3232,115 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
/* Prevent the cursor from being drawn outside the text area. */
r = NSIntersectionRect (r, ns_row_rect (w, glyph_row, TEXT_AREA));
+#ifdef NS_IMPL_COCOA
+ /* Semi-private NSAccessibility keys for rich text change notifications.
+ These symbols are exported by AppKit.framework (macOS 10.11+) and used
+ by WebKit for VoiceOver typing echo. Declared extern here because
+ they are not in the public AppKit headers. */
+ extern NSString *NSAccessibilityTextStateChangeTypeKey;
+ extern NSString *NSAccessibilityTextChangeValues;
+ extern NSString *NSAccessibilityTextEditType;
+ extern NSString *NSAccessibilityTextChangeValue;
+ /* NSAccessibility keys for rich text change notifications.
+ Used by WebKit/Safari for VoiceOver typing echo. These symbols
+ have been exported by AppKit since macOS 10.11 but were only
+ added to the public headers in the macOS 26 SDK. We use raw
+ string literals here to avoid redeclaration type conflicts
+ across different SDK versions. */
+
+ /* Accessibility cursor tracking for macOS Zoom and VoiceOver.
+
@@ -121,12 +119,12 @@ index 932d209..8dc5915 100644
+ kAXTextStateChangeTypeEdit = 1, kAXTextEditTypeTyping = 3. */
+
+ NSDictionary *change = @{
+ NSAccessibilityTextEditType: @3,
+ NSAccessibilityTextChangeValue: changedText
+ @"AXTextEditType": @3,
+ @"AXTextChangeValue": changedText
+ };
+ NSDictionary *userInfo = @{
+ NSAccessibilityTextStateChangeTypeKey: @1,
+ NSAccessibilityTextChangeValues: @[change]
+ @"AXTextStateChangeType": @1,
+ @"AXTextChangeValues": @[change]
+ };
+ NSAccessibilityPostNotificationWithUserInfo (
+ view, NSAccessibilityValueChangedNotification, userInfo);
@@ -166,7 +164,7 @@ index 932d209..8dc5915 100644
ns_focus (f, NULL, 0);
NSGraphicsContext *ctx = [NSGraphicsContext currentContext];
@@ -8237,6 +8348,14 @@ - (void)windowDidBecomeKey /* for direct calls */
@@ -8237,6 +8346,14 @@ - (void)windowDidBecomeKey /* for direct calls */
XSETFRAME (event.frame_or_window, emacsframe);
kbd_buffer_store_event (&event);
ns_send_appdefined (-1); // Kick main loop
@@ -181,7 +179,7 @@ index 932d209..8dc5915 100644
}
@@ -9474,6 +9593,421 @@ - (int) fullscreenState
@@ -9474,6 +9591,421 @@ - (int) fullscreenState
return fs_state;
}