From abf7b3c2eec99916bcbaf21fa218c4d70b1d9f4f Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Wed, 3 Dec 2025 18:50:11 -0500 Subject: [PATCH] Accessibility: Re-apply stored name when recreating nodes in _ensure_node When TabContainer calls accessibility_update_add_related_controls(), it triggers _ensure_node() which creates a new AccessKit node. Since the node pointer was nulled after the previous tree update push, this creates an empty node without any properties. TabBar only sets tab properties (name, bounds) when accessibility_item_dirty is true. After initial setup, dirty=false, so recreated nodes would be pushed without names, causing screen readers to announce "page tab" without the tab name. This fix re-applies the stored name (and name_extra_info) when _ensure_node creates a new node, ensuring tab names persist across node recreations. --- drivers/accesskit/accessibility_driver_accesskit.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/accesskit/accessibility_driver_accesskit.cpp b/drivers/accesskit/accessibility_driver_accesskit.cpp index 0749e873a31..476571376a1 100644 --- a/drivers/accesskit/accessibility_driver_accesskit.cpp +++ b/drivers/accesskit/accessibility_driver_accesskit.cpp @@ -612,6 +612,13 @@ _FORCE_INLINE_ void AccessibilityDriverAccessKit::_ensure_node(const RID &p_id, wd->update.insert(p_id); p_ae->node = accesskit_node_new(p_ae->role); + + // Re-apply stored name if any, so nodes recreated by _ensure_node + // retain their label even if the caller doesn't re-set all properties. + if (!p_ae->name.is_empty() || !p_ae->name_extra_info.is_empty()) { + String full_name = p_ae->name + " " + p_ae->name_extra_info; + accesskit_node_set_label(p_ae->node, full_name.utf8().ptr()); + } } }