From 7f13b04c99ebe75bff93b4cc13dee5753a819689 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Mon, 29 Dec 2025 16:31:37 -0500 Subject: [PATCH] a11y: Only support blur and focus actions on widgets that are actually focusable --- scene/gui/control.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index edd83f3f39..bd9890f847 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -2262,7 +2262,11 @@ void Control::set_focus_mode(FocusMode p_focus_mode) { release_focus(); } + if (data.focus_mode == p_focus_mode) { + return; + } data.focus_mode = p_focus_mode; + queue_accessibility_update(); } Control::FocusMode Control::get_focus_mode() const { @@ -2286,6 +2290,7 @@ void Control::set_focus_behavior_recursive(FocusBehaviorRecursive p_focus_behavi } data.focus_behavior_recursive = p_focus_behavior_recursive; _update_focus_behavior_recursive(); + queue_accessibility_update(); } Control::FocusBehaviorRecursive Control::get_focus_behavior_recursive() const { @@ -3750,8 +3755,10 @@ void Control::_notification(int p_notification) { DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_CLIPS_CHILDREN, data.clip_contents); DisplayServer::get_singleton()->accessibility_update_set_flag(ae, DisplayServer::AccessibilityFlags::FLAG_TOUCH_PASSTHROUGH, data.mouse_filter == MOUSE_FILTER_PASS); - DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Control::_accessibility_action_foucs)); - DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Control::_accessibility_action_blur)); + if (_is_focusable()) { + DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_FOCUS, callable_mp(this, &Control::_accessibility_action_foucs)); + DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_BLUR, callable_mp(this, &Control::_accessibility_action_blur)); + } DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SHOW_TOOLTIP, callable_mp(this, &Control::_accessibility_action_show_tooltip)); DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_HIDE_TOOLTIP, callable_mp(this, &Control::_accessibility_action_hide_tooltip)); DisplayServer::get_singleton()->accessibility_update_add_action(ae, DisplayServer::AccessibilityAction::ACTION_SCROLL_INTO_VIEW, callable_mp(this, &Control::_accessibility_action_scroll_into_view));