a11y: Only support blur and focus actions on widgets that are actually focusable

This commit is contained in:
Nolan Darilek
2025-12-29 16:31:37 -05:00
parent 1559ab34c6
commit 7f13b04c99

View File

@@ -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));