@@ -2120,6 +2120,100 @@ void Control::accessibility_drop() {
21202120 queue_accessibility_update ();
21212121}
21222122
2123+ String Control::get_accessibility_container_name (const Node *p_node) const {
2124+ String ret;
2125+ if (GDVIRTUAL_CALL (_get_accessibility_container_name, p_node, ret)) {
2126+ } else if (data.parent_control ) {
2127+ ret = data.parent_control ->get_accessibility_container_name (this );
2128+ }
2129+ return ret;
2130+ }
2131+
2132+ void Control::set_accessibility_name (const String &p_name) {
2133+ ERR_THREAD_GUARD
2134+ if (data.accessibility_name != p_name) {
2135+ data.accessibility_name = p_name;
2136+ queue_accessibility_update ();
2137+ update_configuration_warnings ();
2138+ }
2139+ }
2140+
2141+ String Control::get_accessibility_name () const {
2142+ return tr (data.accessibility_name );
2143+ }
2144+
2145+ void Control::set_accessibility_description (const String &p_description) {
2146+ ERR_THREAD_GUARD
2147+ if (data.accessibility_description != p_description) {
2148+ data.accessibility_description = p_description;
2149+ queue_accessibility_update ();
2150+ }
2151+ }
2152+
2153+ String Control::get_accessibility_description () const {
2154+ return tr (data.accessibility_description );
2155+ }
2156+
2157+ void Control::set_accessibility_live (DisplayServer::AccessibilityLiveMode p_mode) {
2158+ ERR_THREAD_GUARD
2159+ if (data.accessibility_live != p_mode) {
2160+ data.accessibility_live = p_mode;
2161+ queue_accessibility_update ();
2162+ }
2163+ }
2164+
2165+ DisplayServer::AccessibilityLiveMode Control::get_accessibility_live () const {
2166+ return data.accessibility_live ;
2167+ }
2168+
2169+ void Control::set_accessibility_controls_nodes (const TypedArray<NodePath> &p_node_path) {
2170+ ERR_MAIN_THREAD_GUARD;
2171+ if (data.accessibility_controls_nodes != p_node_path) {
2172+ data.accessibility_controls_nodes = p_node_path;
2173+ queue_accessibility_update ();
2174+ }
2175+ }
2176+
2177+ TypedArray<NodePath> Control::get_accessibility_controls_nodes () const {
2178+ return data.accessibility_controls_nodes ;
2179+ }
2180+
2181+ void Control::set_accessibility_described_by_nodes (const TypedArray<NodePath> &p_node_path) {
2182+ ERR_MAIN_THREAD_GUARD;
2183+ if (data.accessibility_described_by_nodes != p_node_path) {
2184+ data.accessibility_described_by_nodes = p_node_path;
2185+ queue_accessibility_update ();
2186+ }
2187+ }
2188+
2189+ TypedArray<NodePath> Control::get_accessibility_described_by_nodes () const {
2190+ return data.accessibility_described_by_nodes ;
2191+ }
2192+
2193+ void Control::set_accessibility_labeled_by_nodes (const TypedArray<NodePath> &p_node_path) {
2194+ ERR_MAIN_THREAD_GUARD;
2195+ if (data.accessibility_labeled_by_nodes != p_node_path) {
2196+ data.accessibility_labeled_by_nodes = p_node_path;
2197+ queue_accessibility_update ();
2198+ }
2199+ }
2200+
2201+ TypedArray<NodePath> Control::get_accessibility_labeled_by_nodes () const {
2202+ return data.accessibility_labeled_by_nodes ;
2203+ }
2204+
2205+ void Control::set_accessibility_flow_to_nodes (const TypedArray<NodePath> &p_node_path) {
2206+ ERR_MAIN_THREAD_GUARD;
2207+ if (data.accessibility_flow_to_nodes != p_node_path) {
2208+ data.accessibility_flow_to_nodes = p_node_path;
2209+ queue_accessibility_update ();
2210+ }
2211+ }
2212+
2213+ TypedArray<NodePath> Control::get_accessibility_flow_to_nodes () const {
2214+ return data.accessibility_flow_to_nodes ;
2215+ }
2216+
21232217void Control::set_drag_preview (Control *p_control) {
21242218 ERR_MAIN_THREAD_GUARD;
21252219 ERR_FAIL_COND (!is_inside_tree ());
@@ -3605,6 +3699,16 @@ void Control::_notification(int p_notification) {
36053699 RID ae = get_accessibility_element ();
36063700 ERR_FAIL_COND (ae.is_null ());
36073701
3702+ // Base info.
3703+ if (get_parent_control ()) {
3704+ String container_info = get_parent_control ()->get_accessibility_container_name (this );
3705+ DisplayServer::get_singleton ()->accessibility_update_set_name (ae, container_info.is_empty () ? get_accessibility_name () : get_accessibility_name () + " " + container_info);
3706+ } else {
3707+ DisplayServer::get_singleton ()->accessibility_update_set_name (ae, get_accessibility_name ());
3708+ }
3709+ DisplayServer::get_singleton ()->accessibility_update_set_description (ae, get_accessibility_description ());
3710+ DisplayServer::get_singleton ()->accessibility_update_set_live (ae, get_accessibility_live ());
3711+
36083712 DisplayServer::get_singleton ()->accessibility_update_set_transform (ae, get_transform ());
36093713 DisplayServer::get_singleton ()->accessibility_update_set_bounds (ae, Rect2 (Vector2 (), data.size_cache ));
36103714 DisplayServer::get_singleton ()->accessibility_update_set_tooltip (ae, data.tooltip );
@@ -3623,6 +3727,44 @@ void Control::_notification(int p_notification) {
36233727 DisplayServer::get_singleton ()->accessibility_update_set_extra_info (ae, vformat (RTR (" %s can not be dropped here. Use %s to cancel." ), get_viewport ()->gui_get_drag_description (), InputMap::get_singleton ()->get_action_description (" ui_cancel" )));
36243728 }
36253729 }
3730+
3731+ // Related nodes.
3732+ for (int i = 0 ; i < data.accessibility_controls_nodes .size (); i++) {
3733+ const NodePath &np = data.accessibility_controls_nodes [i];
3734+ if (!np.is_empty ()) {
3735+ Node *n = get_node (np);
3736+ if (n && !n->is_part_of_edited_scene ()) {
3737+ DisplayServer::get_singleton ()->accessibility_update_add_related_controls (ae, n->get_accessibility_element ());
3738+ }
3739+ }
3740+ }
3741+ for (int i = 0 ; i < data.accessibility_described_by_nodes .size (); i++) {
3742+ const NodePath &np = data.accessibility_described_by_nodes [i];
3743+ if (!np.is_empty ()) {
3744+ Node *n = get_node (np);
3745+ if (n && !n->is_part_of_edited_scene ()) {
3746+ DisplayServer::get_singleton ()->accessibility_update_add_related_described_by (ae, n->get_accessibility_element ());
3747+ }
3748+ }
3749+ }
3750+ for (int i = 0 ; i < data.accessibility_labeled_by_nodes .size (); i++) {
3751+ const NodePath &np = data.accessibility_labeled_by_nodes [i];
3752+ if (!np.is_empty ()) {
3753+ Node *n = get_node (np);
3754+ if (n && !n->is_part_of_edited_scene ()) {
3755+ DisplayServer::get_singleton ()->accessibility_update_add_related_labeled_by (ae, n->get_accessibility_element ());
3756+ }
3757+ }
3758+ }
3759+ for (int i = 0 ; i < data.accessibility_flow_to_nodes .size (); i++) {
3760+ const NodePath &np = data.accessibility_flow_to_nodes [i];
3761+ if (!np.is_empty ()) {
3762+ Node *n = get_node (np);
3763+ if (n && !n->is_part_of_edited_scene ()) {
3764+ DisplayServer::get_singleton ()->accessibility_update_add_related_flow_to (ae, n->get_accessibility_element ());
3765+ }
3766+ }
3767+ }
36263768 } break ;
36273769
36283770 case NOTIFICATION_POSTINITIALIZE: {
@@ -3962,6 +4104,22 @@ void Control::_bind_methods() {
39624104 ClassDB::bind_method (D_METHOD (" accessibility_drag" ), &Control::accessibility_drag);
39634105 ClassDB::bind_method (D_METHOD (" accessibility_drop" ), &Control::accessibility_drop);
39644106
4107+ ClassDB::bind_method (D_METHOD (" set_accessibility_name" , " name" ), &Control::set_accessibility_name);
4108+ ClassDB::bind_method (D_METHOD (" get_accessibility_name" ), &Control::get_accessibility_name);
4109+ ClassDB::bind_method (D_METHOD (" set_accessibility_description" , " description" ), &Control::set_accessibility_description);
4110+ ClassDB::bind_method (D_METHOD (" get_accessibility_description" ), &Control::get_accessibility_description);
4111+ ClassDB::bind_method (D_METHOD (" set_accessibility_live" , " mode" ), &Control::set_accessibility_live);
4112+ ClassDB::bind_method (D_METHOD (" get_accessibility_live" ), &Control::get_accessibility_live);
4113+
4114+ ClassDB::bind_method (D_METHOD (" set_accessibility_controls_nodes" , " node_path" ), &Control::set_accessibility_controls_nodes);
4115+ ClassDB::bind_method (D_METHOD (" get_accessibility_controls_nodes" ), &Control::get_accessibility_controls_nodes);
4116+ ClassDB::bind_method (D_METHOD (" set_accessibility_described_by_nodes" , " node_path" ), &Control::set_accessibility_described_by_nodes);
4117+ ClassDB::bind_method (D_METHOD (" get_accessibility_described_by_nodes" ), &Control::get_accessibility_described_by_nodes);
4118+ ClassDB::bind_method (D_METHOD (" set_accessibility_labeled_by_nodes" , " node_path" ), &Control::set_accessibility_labeled_by_nodes);
4119+ ClassDB::bind_method (D_METHOD (" get_accessibility_labeled_by_nodes" ), &Control::get_accessibility_labeled_by_nodes);
4120+ ClassDB::bind_method (D_METHOD (" set_accessibility_flow_to_nodes" , " node_path" ), &Control::set_accessibility_flow_to_nodes);
4121+ ClassDB::bind_method (D_METHOD (" get_accessibility_flow_to_nodes" ), &Control::get_accessibility_flow_to_nodes);
4122+
39654123 ClassDB::bind_method (D_METHOD (" set_mouse_filter" , " filter" ), &Control::set_mouse_filter);
39664124 ClassDB::bind_method (D_METHOD (" get_mouse_filter" ), &Control::get_mouse_filter);
39674125 ClassDB::bind_method (D_METHOD (" get_mouse_filter_with_override" ), &Control::get_mouse_filter_with_override);
@@ -4102,6 +4260,15 @@ void Control::_bind_methods() {
41024260 ADD_GROUP (" Input" , " " );
41034261 ADD_PROPERTY (PropertyInfo (Variant::OBJECT, " shortcut_context" , PROPERTY_HINT_NODE_TYPE, " Node" ), " set_shortcut_context" , " get_shortcut_context" );
41044262
4263+ ADD_GROUP (" Accessibility" , " accessibility_" );
4264+ ADD_PROPERTY (PropertyInfo (Variant::STRING, " accessibility_name" ), " set_accessibility_name" , " get_accessibility_name" );
4265+ ADD_PROPERTY (PropertyInfo (Variant::STRING, " accessibility_description" ), " set_accessibility_description" , " get_accessibility_description" );
4266+ ADD_PROPERTY (PropertyInfo (Variant::INT, " accessibility_live" , PROPERTY_HINT_ENUM, " Off,Polite,Assertive" ), " set_accessibility_live" , " get_accessibility_live" );
4267+ ADD_PROPERTY (PropertyInfo (Variant::ARRAY, " accessibility_controls_nodes" , PROPERTY_HINT_ARRAY_TYPE, " NodePath" ), " set_accessibility_controls_nodes" , " get_accessibility_controls_nodes" );
4268+ ADD_PROPERTY (PropertyInfo (Variant::ARRAY, " accessibility_described_by_nodes" , PROPERTY_HINT_ARRAY_TYPE, " NodePath" ), " set_accessibility_described_by_nodes" , " get_accessibility_described_by_nodes" );
4269+ ADD_PROPERTY (PropertyInfo (Variant::ARRAY, " accessibility_labeled_by_nodes" , PROPERTY_HINT_ARRAY_TYPE, " NodePath" ), " set_accessibility_labeled_by_nodes" , " get_accessibility_labeled_by_nodes" );
4270+ ADD_PROPERTY (PropertyInfo (Variant::ARRAY, " accessibility_flow_to_nodes" , PROPERTY_HINT_ARRAY_TYPE, " NodePath" ), " set_accessibility_flow_to_nodes" , " get_accessibility_flow_to_nodes" );
4271+
41054272 ADD_GROUP (" Theme" , " theme_" );
41064273 ADD_PROPERTY (PropertyInfo (Variant::OBJECT, " theme" , PROPERTY_HINT_RESOURCE_TYPE, " Theme" ), " set_theme" , " get_theme" );
41074274 ADD_PROPERTY (PropertyInfo (Variant::STRING, " theme_type_variation" , PROPERTY_HINT_ENUM_SUGGESTION), " set_theme_type_variation" , " get_theme_type_variation" );
@@ -4225,6 +4392,7 @@ void Control::_bind_methods() {
42254392 GDVIRTUAL_BIND (_make_custom_tooltip, " for_text" );
42264393
42274394 GDVIRTUAL_BIND (_accessibility_get_contextual_info);
4395+ GDVIRTUAL_BIND (_get_accessibility_container_name, " node" );
42284396
42294397 GDVIRTUAL_BIND (_gui_input, " event" );
42304398}
0 commit comments