patches: fix build errors (Fplist_get arity, MRC weak, duplicate decl)

This commit is contained in:
2026-02-27 10:31:02 +01:00
parent 92ef24332f
commit 23102444d4

View File

@@ -1,19 +1,19 @@
From c0d683db88b52e0e154b6434a5f29ed3ed36703d Mon Sep 17 00:00:00 2001 From 9ecac3f53f402174cafbe07d7809826f9f698a23 Mon Sep 17 00:00:00 2001
From: Martin Sukany <martin@sukany.cz> From: Martin Sukany <martin@sukany.cz>
Date: Fri, 27 Feb 2026 10:26:21 +0100 Date: Fri, 27 Feb 2026 10:30:58 +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 | 110 +++ src/nsterm.h | 109 +++
src/nsterm.m | 2646 +++++++++++++++++++++++++++++++++++++++++++++++--- src/nsterm.m | 2645 +++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 2606 insertions(+), 150 deletions(-) 2 files changed, 2604 insertions(+), 150 deletions(-)
diff --git a/src/nsterm.h b/src/nsterm.h diff --git a/src/nsterm.h b/src/nsterm.h
index 7c1ee4c..bc9e17b 100644 index 7c1ee4c..6c95673 100644
--- a/src/nsterm.h --- a/src/nsterm.h
+++ b/src/nsterm.h +++ b/src/nsterm.h
@@ -453,6 +453,101 @@ enum ns_return_frame_mode @@ -453,6 +453,100 @@ enum ns_return_frame_mode
@end @end
@@ -66,7 +66,6 @@ index 7c1ee4c..bc9e17b 100644
+@property (nonatomic, assign) ptrdiff_t cachedCompletionOverlayEnd; +@property (nonatomic, assign) ptrdiff_t cachedCompletionOverlayEnd;
+@property (nonatomic, assign) ptrdiff_t cachedCompletionPoint; +@property (nonatomic, assign) ptrdiff_t cachedCompletionPoint;
+- (void)invalidateTextCache; +- (void)invalidateTextCache;
+- (void)invalidateInteractiveSpans;
+- (void)postAccessibilityNotificationsForFrame:(struct frame *)f; +- (void)postAccessibilityNotificationsForFrame:(struct frame *)f;
+- (ptrdiff_t)charposForAccessibilityIndex:(NSUInteger)ax_idx; +- (ptrdiff_t)charposForAccessibilityIndex:(NSUInteger)ax_idx;
+- (NSUInteger)accessibilityIndexForCharpos:(ptrdiff_t)charpos; +- (NSUInteger)accessibilityIndexForCharpos:(ptrdiff_t)charpos;
@@ -99,7 +98,7 @@ index 7c1ee4c..bc9e17b 100644
+@property (nonatomic, assign) EmacsAXSpanType spanType; +@property (nonatomic, assign) EmacsAXSpanType spanType;
+@property (nonatomic, copy) NSString *spanLabel; +@property (nonatomic, copy) NSString *spanLabel;
+@property (nonatomic, copy) NSString *spanValue; +@property (nonatomic, copy) NSString *spanValue;
+@property (nonatomic, weak) EmacsAccessibilityBuffer *parentBuffer; +@property (nonatomic, unsafe_unretained) EmacsAccessibilityBuffer *parentBuffer;
+ +
+- (NSAccessibilityRole) accessibilityRole; +- (NSAccessibilityRole) accessibilityRole;
+- (NSString *) accessibilityLabel; +- (NSString *) accessibilityLabel;
@@ -115,7 +114,7 @@ index 7c1ee4c..bc9e17b 100644
/* ========================================================================== /* ==========================================================================
The main Emacs view The main Emacs view
@@ -471,6 +566,14 @@ enum ns_return_frame_mode @@ -471,6 +565,14 @@ enum ns_return_frame_mode
#ifdef NS_IMPL_COCOA #ifdef NS_IMPL_COCOA
char *old_title; char *old_title;
BOOL maximizing_resize; BOOL maximizing_resize;
@@ -130,7 +129,7 @@ index 7c1ee4c..bc9e17b 100644
#endif #endif
BOOL font_panel_active; BOOL font_panel_active;
NSFont *font_panel_result; NSFont *font_panel_result;
@@ -528,6 +631,13 @@ enum ns_return_frame_mode @@ -528,6 +630,13 @@ enum ns_return_frame_mode
- (void)windowWillExitFullScreen; - (void)windowWillExitFullScreen;
- (void)windowDidExitFullScreen; - (void)windowDidExitFullScreen;
- (void)windowDidBecomeKey; - (void)windowDidBecomeKey;
@@ -145,7 +144,7 @@ index 7c1ee4c..bc9e17b 100644
diff --git a/src/nsterm.m b/src/nsterm.m diff --git a/src/nsterm.m b/src/nsterm.m
index 932d209..1acdc42 100644 index 932d209..1166ad9 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)
@@ -803,7 +802,7 @@ index 932d209..1acdc42 100644
+ns_ax_text_prop_at (ptrdiff_t pos, Lisp_Object prop, Lisp_Object buf_obj) +ns_ax_text_prop_at (ptrdiff_t pos, Lisp_Object prop, Lisp_Object buf_obj)
+{ +{
+ Lisp_Object plist = Ftext_properties_at (make_fixnum (pos), buf_obj); + Lisp_Object plist = Ftext_properties_at (make_fixnum (pos), buf_obj);
+ return Fplist_get (plist, prop); + return Fplist_get (plist, prop, Qnil);
+} +}
-/*****************************************************************************/ -/*****************************************************************************/
@@ -911,28 +910,28 @@ index 932d209..1acdc42 100644
+ EmacsAXSpanType span_type = (EmacsAXSpanType) -1; + EmacsAXSpanType span_type = (EmacsAXSpanType) -1;
+ Lisp_Object limit_prop = Qnil; + Lisp_Object limit_prop = Qnil;
+ +
+ if (!NILP (Fplist_get (plist, Qwidget_sym))) + if (!NILP (Fplist_get (plist, Qwidget_sym, Qnil)))
+ { + {
+ span_type = EmacsAXSpanTypeWidget; + span_type = EmacsAXSpanTypeWidget;
+ limit_prop = Qwidget_sym; + limit_prop = Qwidget_sym;
+ } + }
+ else if (!NILP (Fplist_get (plist, Qbutton_sym))) + else if (!NILP (Fplist_get (plist, Qbutton_sym, Qnil)))
+ { + {
+ span_type = EmacsAXSpanTypeButton; + span_type = EmacsAXSpanTypeButton;
+ limit_prop = Qbutton_sym; + limit_prop = Qbutton_sym;
+ } + }
+ else if (!NILP (Fplist_get (plist, Qfollow_link_sym))) + else if (!NILP (Fplist_get (plist, Qfollow_link_sym, Qnil)))
+ { + {
+ span_type = EmacsAXSpanTypeLink; + span_type = EmacsAXSpanTypeLink;
+ limit_prop = Qfollow_link_sym; + limit_prop = Qfollow_link_sym;
+ } + }
+ else if (!NILP (Fplist_get (plist, Qorg_link_sym))) + else if (!NILP (Fplist_get (plist, Qorg_link_sym, Qnil)))
+ { + {
+ span_type = EmacsAXSpanTypeLink; + span_type = EmacsAXSpanTypeLink;
+ limit_prop = Qorg_link_sym; + limit_prop = Qorg_link_sym;
+ } + }
+ else if (is_completion_buf + else if (is_completion_buf
+ && !NILP (Fplist_get (plist, Qmouse_face_sym))) + && !NILP (Fplist_get (plist, Qmouse_face_sym, Qnil)))
+ { + {
+ span_type = EmacsAXSpanTypeCompletionItem; + span_type = EmacsAXSpanTypeCompletionItem;
+ limit_prop = Qmouse_face_sym; + limit_prop = Qmouse_face_sym;
@@ -2591,7 +2590,7 @@ index 932d209..1acdc42 100644
} }
@@ -9474,6 +11518,308 @@ - (int) fullscreenState @@ -9474,6 +11518,307 @@ - (int) fullscreenState
return fs_state; return fs_state;
} }
@@ -2725,7 +2724,6 @@ index 932d209..1acdc42 100644
+ if (!accessibilityElements || !accessibilityTreeValid) + if (!accessibilityElements || !accessibilityTreeValid)
+ [self rebuildAccessibilityTree]; + [self rebuildAccessibilityTree];
+ +
+ struct window *sel = XWINDOW (emacsframe->selected_window);
+ for (EmacsAccessibilityElement *elem in accessibilityElements) + for (EmacsAccessibilityElement *elem in accessibilityElements)
+ { + {
+ if ([elem isKindOfClass:[EmacsAccessibilityBuffer class]] + if ([elem isKindOfClass:[EmacsAccessibilityBuffer class]]