2 #include "elementary_config.h"
5 #define EFL_ACCESS_OBJECT_PROTECTED
9 //TIZEN_ONLY(20181211): Fix for missing unregistration of atspi objects
10 void unregister_atspi_object_in_bridge(const Eo *obj);
13 const char* Access_Name[] = {
71 "table column header",
103 "input method window",
106 "document spreadsheet",
107 "document presentation",
120 struct _Efl_Access_Event_Handler
126 //TIZEN_ONLY(20190922): add name callback, description callback.
127 struct _Efl_Access_Reading_Info_Cb_Item
129 Efl_Access_Reading_Info_Cb cb;
132 typedef struct _Efl_Access_Reading_Info_Cb_Item Efl_Access_Reading_Info_Cb_Item;
135 //TIZEN_ONLY(20170405) Add gesture method to accessible interface
136 struct _Efl_Access_Gesture_Cb_Item
138 Efl_Access_Gesture_Cb cb;
141 typedef struct _Efl_Access_Gesture_Cb_Item Efl_Access_Gesture_Cb_Item;
143 struct _Elm_Atspi_Gesture_Cb_Item
145 Elm_Atspi_Gesture_Cb cb;
148 typedef struct _Elm_Atspi_Gesture_Cb_Item Elm_Atspi_Gesture_Cb_Item;
151 struct _Efl_Access_Object_Data
153 Efl_Access_Relation_Set relations;
154 //TIZEN_ONLY(20190922): add name callback, description callback.
155 Efl_Access_Reading_Info_Cb_Item name_cb_item;
156 Efl_Access_Reading_Info_Cb_Item description_cb_item;
158 //TIZEN_ONLY(20230414): Support org.a11y.atspi.Value.Text property.
159 Efl_Access_Reading_Info_Cb_Item value_text_cb_item;
161 //TIZEN_ONLY(20170405) Add gesture method to accessible interface
162 Efl_Access_Gesture_Cb_Item gesture_cb_item;
163 Elm_Atspi_Gesture_Cb_Item legacy_gesture_cb_item;
165 Eina_List *attr_list;
167 const char *description;
168 //TIZEN_ONLY(20230414): Support org.a11y.atspi.Value.Text property.
169 const char *value_text;
171 const char *translation_domain;
172 Efl_Access_Role role;
173 Efl_Access_Reading_Info_Type_Mask reading_info;
175 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
180 typedef struct _Efl_Access_Object_Data Efl_Access_Object_Data;
183 static Eina_List *global_callbacks;
187 _efl_access_object_index_in_parent_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
189 Eina_List *l, *children = NULL;
193 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
194 Eo *parent = efl_access_object_access_parent_get(obj);
196 if (!parent) return -1;
198 children = efl_access_object_access_children_get(parent);
199 if (!children) return -1;
201 EINA_LIST_FOREACH(children, l, chld)
207 if (ret == (int)eina_list_count(children))
209 ERR("Object %s not present in its AT-SPI parents (%s) children list! This should never happen.", efl_class_name_get(efl_class_get(obj)), efl_class_name_get(efl_class_get(parent)));
212 eina_list_free(children);
216 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
218 _efl_access_object_access_parent_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED)
224 _efl_access_object_access_parent_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED, Eo *parent)
231 _efl_access_object_attributes_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
233 Eina_List *attr_list = NULL;
237 Efl_Access_Attribute *t_attr = NULL;
238 EINA_LIST_FOREACH(pd->attr_list, l, t_attr)
240 Efl_Access_Attribute *attr = calloc(1, sizeof(Efl_Access_Attribute));
244 attr->key = eina_stringshare_add(t_attr->key);
245 attr->value = eina_stringshare_add(t_attr->value);
246 attr_list = eina_list_append(attr_list, attr);
253 _efl_access_object_attribute_append(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *key, const char *value)
256 Efl_Access_Attribute *attr = NULL;
258 if (!key || !value) return;
260 /* Check existing attributes has this key */
261 EINA_LIST_FOREACH(pd->attr_list, l, attr)
263 if (!strcmp((const char *)attr->key, key))
265 eina_stringshare_replace(&attr->value, value);
270 /* Add new attribute */
271 attr = calloc(1, sizeof(Efl_Access_Attribute));
274 attr->key = eina_stringshare_add(key);
275 attr->value = eina_stringshare_add(value);
276 pd->attr_list = eina_list_append(pd->attr_list, attr);
280 _efl_access_object_attribute_del(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *key)
283 Efl_Access_Attribute *attr = NULL;
286 if (!pd->attr_list) return;
288 /* Check whether existing attribute list has this key and delete */
289 EINA_LIST_FOREACH(pd->attr_list, l, attr)
291 if (!strcmp((const char *)attr->key, key))
293 pd->attr_list = eina_list_remove_list(pd->attr_list, l);
294 eina_stringshare_del(attr->key);
295 eina_stringshare_del(attr->value);
302 EOLIAN static void _efl_access_object_attributes_clear(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
304 if (!pd->attr_list) return;
305 Efl_Access_Attribute *attr;
306 EINA_LIST_FREE(pd->attr_list, attr)
308 eina_stringshare_del(attr->key);
309 eina_stringshare_del(attr->value);
312 pd->attr_list = NULL;
316 _efl_access_object_reading_info_type_set(Eo *obj, Efl_Access_Object_Data *pd, Efl_Access_Reading_Info_Type reading_info)
318 Eina_Strbuf *buf = NULL;
319 if (reading_info == pd->reading_info)
321 pd->reading_info = reading_info;
322 if (!pd->reading_info)
324 efl_access_object_attribute_del(obj, "reading_info_type");
327 buf = eina_strbuf_new();
328 eina_strbuf_reset(buf);
329 if (reading_info & (EFL_ACCESS_READING_INFO_TYPE_NAME))
331 eina_strbuf_append(buf, "name");
332 eina_strbuf_append_char(buf, '|');
334 if (reading_info & (EFL_ACCESS_READING_INFO_TYPE_ROLE))
336 eina_strbuf_append(buf, "role");
337 eina_strbuf_append_char(buf, '|');
339 if (reading_info & (EFL_ACCESS_READING_INFO_TYPE_DESCRIPTION))
341 eina_strbuf_append(buf, "description");
342 eina_strbuf_append_char(buf, '|');
344 if (reading_info & (EFL_ACCESS_READING_INFO_TYPE_STATE))
346 eina_strbuf_append(buf, "state");
348 efl_access_object_attribute_append(obj, "reading_info_type", eina_strbuf_string_get(buf));
349 eina_strbuf_free(buf);
352 EOLIAN Efl_Access_Reading_Info_Type_Mask
353 _efl_access_object_reading_info_type_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
355 return pd->reading_info;
358 EOLIAN static Efl_Access_Role
359 _efl_access_object_role_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
365 //TIZEN_ONLY(20200220): add EINA_UNUSED for unused parameters
366 _efl_access_object_role_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Role role)
367 //_efl_access_object_role_set(Eo *obj, Efl_Access_Object_Data *pd, Efl_Access_Role role)
370 if (pd->role != role)
373 //TIZEN_ONLY(20160708) Do not send role changed signal - 10000 list items send 10000 IPC.
374 //efl_access_role_changed_signal_emit(obj);
380 _efl_access_object_role_name_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
382 Efl_Access_Role role;
384 role = efl_access_object_role_get(obj);
386 return role > EFL_ACCESS_ROLE_LAST_DEFINED ? "" : Access_Name[role];
390 _efl_access_object_i18n_name_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
392 //TIZEN_ONLY(20190922): add name callback, description callback.
394 if (pd->name_cb_item.cb)
395 ret = pd->name_cb_item.cb((void *)pd->name_cb_item.data, (Eo *)obj);
398 //TIZEN_ONLY(20220826): Remove markup from accessible name
401 text = _elm_util_mkup_to_text(ret);
402 eina_stringshare_replace(&pd->translation_domain, NULL);
403 pd->translation_domain = NULL;
404 eina_stringshare_replace(&pd->name, text);
411 if (pd->translation_domain)
412 return dgettext(pd->translation_domain, pd->name);
418 _efl_access_object_i18n_name_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *val)
420 //TIZEN_ONLY(20220826): Remove markup from accessible name
423 text = _elm_util_mkup_to_text(val); // NULL is OK
424 eina_stringshare_replace(&pd->name, text);
429 //TIZEN_ONLY(20190922): add name callback, description callback.
431 _efl_access_object_name_cb_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Reading_Info_Cb name_cb, const void *data)
433 pd->name_cb_item.cb = name_cb;
434 pd->name_cb_item.data = data;
438 const char * _efl_access_object_description_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
440 //TIZEN_ONLY(20190922): add name callback, description callback.
442 if (pd->description_cb_item.cb)
443 ret = pd->description_cb_item.cb((void *)pd->description_cb_item.data, (Eo *)obj);
446 eina_stringshare_replace(&pd->translation_domain, NULL);
447 pd->translation_domain = NULL;
448 eina_stringshare_replace(&pd->description, ret);
453 if (pd->translation_domain)
454 return dgettext(pd->translation_domain, pd->description);
456 return pd->description;
460 _efl_access_object_description_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *val)
462 eina_stringshare_replace(&pd->description, val);
465 //TIZEN_ONLY(20190922): add name callback, description callback.
467 _efl_access_object_description_cb_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Reading_Info_Cb description_cb, const void *data)
469 pd->description_cb_item.cb = description_cb;
470 pd->description_cb_item.data = data;
474 //TIZEN_ONLY(20230414): Support org.a11y.atspi.Value.Text property.
475 EOLIAN static const char *
476 _efl_access_object_value_text_get(const Eo *obj, Efl_Access_Object_Data *pd)
479 if (pd->value_text_cb_item.cb)
480 ret = pd->value_text_cb_item.cb((void *)pd->value_text_cb_item.data, (Eo *)obj);
483 eina_stringshare_replace(&pd->value_text, ret);
486 return pd->value_text;
490 _efl_access_object_value_text_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *val)
492 eina_stringshare_replace(&pd->value_text, val);
496 _efl_access_object_value_text_cb_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Reading_Info_Cb value_text_cb, const void *data)
498 pd->value_text_cb_item.cb = value_text_cb;
499 pd->value_text_cb_item.data = data;
503 //TIZEN_ONLY(20170405) Add gesture method to accessible interface
505 _efl_access_object_gesture_cb_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Gesture_Cb gesture_cb, const void *data)
507 pd->gesture_cb_item.cb = gesture_cb;
508 pd->gesture_cb_item.data = data;
511 EOLIAN static Eina_Bool
512 _efl_access_object_gesture_do(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, Efl_Access_Gesture_Info gesture_info)
514 Eina_Bool ret = EINA_FALSE;
515 if (pd->gesture_cb_item.cb)
516 ret = pd->gesture_cb_item.cb((void *)pd->gesture_cb_item.data, gesture_info, obj);
518 if (!ret && pd->legacy_gesture_cb_item.cb)
520 Elm_Atspi_Gesture_Info legacy_gesture_info;
521 legacy_gesture_info.type = (Elm_Atspi_Gesture_Type)gesture_info.type;
522 legacy_gesture_info.x_beg = gesture_info.x_beg;
523 legacy_gesture_info.y_beg = gesture_info.y_beg;
524 legacy_gesture_info.x_end = gesture_info.x_end;
525 legacy_gesture_info.y_end = gesture_info.y_end;
526 legacy_gesture_info.state = (Elm_Atspi_Gesture_State)gesture_info.state;
527 legacy_gesture_info.event_time = gesture_info.event_time;
528 ret = pd->legacy_gesture_cb_item.cb((void *)pd->legacy_gesture_cb_item.data, legacy_gesture_info, obj);
535 EOLIAN static const char *
536 _efl_access_object_localized_role_name_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
538 const char *ret = NULL;
539 ret = efl_access_object_role_name_get(obj);
546 EOLIAN static Eina_List *
547 _efl_access_object_access_children_get(const Eo *obj, Efl_Access_Object_Data *pd EINA_UNUSED)
549 Eina_List *children = NULL;
550 Eina_Iterator *iter = NULL;
553 // By default use Efl_Object object hierarchy
555 iter = efl_children_iterator_new((Eo *)obj);
556 if (!iter) return NULL;
558 EINA_ITERATOR_FOREACH(iter, chld)
560 if (efl_isa(chld, EFL_ACCESS_OBJECT_MIXIN))
562 children = eina_list_append(children, chld);
563 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
564 efl_access_object_access_parent_set(chld, (Eo *)obj);
568 eina_iterator_free(iter);
573 EOLIAN static Efl_Access_State_Set
574 _efl_access_object_state_set_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED)
579 //TIZEN_ONLY(20160726): add API elm_atspi_accessible_can_highlight_set/get
581 _efl_access_object_can_highlight_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED, Eina_Bool can_highlight EINA_UNUSED)
583 WRN("The %s object does not implement the \"can_highlight_set\" function.",
584 efl_class_name_get(efl_class_get(obj)));
587 EOLIAN static Eina_Bool
588 _efl_access_object_can_highlight_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED)
590 WRN("The %s object does not implement the \"can_highlight_get\" function.",
591 efl_class_name_get(efl_class_get(obj)));
596 //TIZEN_ONLY(20230220): Add SetListenPostRender to accessible object
598 _efl_access_object_listen_render_post_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED, Eina_Bool enabled EINA_UNUSED)
600 WRN("The %s object does not implement the \"listen_render_post\" function.",
601 efl_class_name_get(efl_class_get(obj)));
605 EOLIAN Efl_Access_Relation_Set
606 _efl_access_object_relation_set_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd EINA_UNUSED)
608 //TIZEN_ONLY(20171115) Fixed the bugs and warnings in atspi relationship APIS
609 //return efl_access_relation_set_clone(pd->relations);
610 WRN("The %s object does not implement the \"accessible_relation_set\" function.",
611 efl_class_name_get(efl_class_get(obj)));
617 efl_access_attribute_free(Efl_Access_Attribute *attr)
619 eina_stringshare_del(attr->key);
620 eina_stringshare_del(attr->value);
624 EAPI void efl_access_attributes_list_free(Eina_List *list)
626 Efl_Access_Attribute *attr;
627 EINA_LIST_FREE(list, attr)
629 efl_access_attribute_free(attr);
634 _efl_access_object_event_emit(Eo *accessible, const Efl_Event_Description *event, void *event_info)
638 Efl_Access_Event_Handler *hdl;
640 if (!accessible || !event || !efl_isa(accessible, EFL_ACCESS_OBJECT_MIXIN))
642 CRI("Invalid parameters, event: %s, obj: %s", event ? event->name : "NULL", accessible ? efl_class_name_get(accessible) : "NULL");
647 ev.object = accessible;
649 ev.info = event_info;
650 EINA_LIST_FOREACH(global_callbacks, l, hdl)
653 hdl->cb(hdl->data, &ev);
657 EOLIAN Efl_Access_Event_Handler *
658 _efl_access_object_event_handler_add(Efl_Event_Cb cb, void *data)
660 Efl_Access_Event_Handler *ret = calloc(1, sizeof(Efl_Access_Event_Handler));
661 if (!ret) return NULL;
666 global_callbacks = eina_list_append(global_callbacks, ret);
672 _efl_access_object_event_handler_del(Efl_Access_Event_Handler *handler)
675 Efl_Access_Event_Handler *hdl;
676 EINA_LIST_FOREACH_SAFE(global_callbacks, l, l2, hdl)
680 global_callbacks = eina_list_remove_list(global_callbacks, l);
688 _efl_access_object_translation_domain_set(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd, const char *domain)
690 eina_stringshare_replace(&pd->translation_domain, domain);
695 _efl_access_object_translation_domain_get(const Eo *obj EINA_UNUSED, Efl_Access_Object_Data *pd)
697 return pd->translation_domain;
701 efl_access_relation_free(Efl_Access_Relation *relation)
703 eina_list_free(relation->objects);
707 EAPI Efl_Access_Relation *
708 efl_access_relation_clone(const Efl_Access_Relation *relation)
710 Efl_Access_Relation *ret = calloc(1, sizeof(Efl_Access_Relation));
711 if (!ret) return NULL;
713 ret->type = relation->type;
714 ret->objects = eina_list_clone(relation->objects);
719 _on_rel_obj_del(void *data, const Efl_Event *event)
721 Efl_Access_Relation_Set *set = data;
722 Efl_Access_Relation *rel;
723 Eina_List *l, *l2, *p, *p2;
726 EINA_LIST_FOREACH_SAFE(*set, l, l2, rel)
728 EINA_LIST_FOREACH_SAFE(rel->objects, p, p2, rel_obj)
730 if (rel_obj == event->object)
731 rel->objects = eina_list_remove_list(rel->objects, p);
735 *set = eina_list_remove_list(*set, l);
742 efl_access_relation_set_relation_append(Efl_Access_Relation_Set *set, Efl_Access_Relation_Type type, const Eo *rel_obj)
744 Efl_Access_Relation *rel;
747 if (!efl_isa(rel_obj, EFL_ACCESS_OBJECT_MIXIN))
750 EINA_LIST_FOREACH(*set, l, rel)
752 if (rel->type == type)
754 ll = eina_list_data_find_list(rel->objects, rel_obj);
757 rel->objects = eina_list_append(rel->objects, rel_obj);
758 efl_event_callback_add((Eo *) rel_obj, EFL_EVENT_DEL, _on_rel_obj_del, set);
762 rel->objects = eina_list_demote_list(rel->objects, ll);
768 rel = calloc(1, sizeof(Efl_Access_Relation));
769 if (!rel) return EINA_FALSE;
772 rel->objects = eina_list_append(rel->objects, rel_obj);
773 *set = eina_list_append(*set, rel);
775 efl_event_callback_add((Eo *) rel_obj, EFL_EVENT_DEL, _on_rel_obj_del, set);
780 efl_access_relation_set_relation_remove(Efl_Access_Relation_Set *set, Efl_Access_Relation_Type type, const Eo *rel_obj)
783 Efl_Access_Relation *rel;
785 EINA_LIST_FOREACH(*set, l, rel)
787 if (rel->type == type)
789 if (eina_list_data_find(rel->objects, rel_obj))
791 efl_event_callback_del((Eo *) rel_obj, EFL_EVENT_DEL, _on_rel_obj_del, set);
792 rel->objects = eina_list_remove(rel->objects, rel_obj);
796 *set = eina_list_remove(*set, rel);
797 efl_access_relation_free(rel);
805 efl_access_relation_set_relation_type_remove(Efl_Access_Relation_Set *set, Efl_Access_Relation_Type type)
808 Efl_Access_Relation *rel;
811 EINA_LIST_FOREACH(*set, l, rel)
813 if (rel->type == type)
815 EINA_LIST_FOREACH(rel->objects, l, obj)
816 efl_event_callback_del(obj, EFL_EVENT_DEL, _on_rel_obj_del, set);
817 *set = eina_list_remove(*set, rel);
818 efl_access_relation_free(rel);
824 //TIZEN_ONLY(20171115) Fixed the bugs and warnings in atspi relationship APIS
826 efl_access_relation_set_free(Efl_Access_Relation_Set *set)
828 Efl_Access_Relation *rel;
832 EINA_LIST_FREE(*set, rel)
834 EINA_LIST_FOREACH(rel->objects, l, obj)
835 efl_event_callback_del(obj, EFL_EVENT_DEL, _on_rel_obj_del, set);
836 efl_access_relation_free(rel);
840 EAPI Efl_Access_Relation_Set
841 efl_access_relation_set_clone(const Efl_Access_Relation_Set *set)
843 Efl_Access_Relation_Set ret = NULL;
845 Efl_Access_Relation *rel;
847 EINA_LIST_FOREACH(*set, l, rel)
849 Efl_Access_Relation *cpy = efl_access_relation_clone(rel);
850 ret = eina_list_append(ret, cpy);
857 EOLIAN static Eina_Bool
858 _efl_access_object_relationship_append(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *sd, Efl_Access_Relation_Type type, const Efl_Access_Object *relation_obj)
860 return efl_access_relation_set_relation_append(&sd->relations, type, relation_obj);
864 _efl_access_object_relationship_remove(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *sd, Efl_Access_Relation_Type type, const Efl_Access_Object *relation_obj)
867 efl_access_relation_set_relation_remove(&sd->relations, type, relation_obj);
869 efl_access_relation_set_relation_type_remove(&sd->relations, type);
873 _efl_access_object_relationships_clear(Eo *obj EINA_UNUSED, Efl_Access_Object_Data *sd)
875 //TIZEN_ONLY(20171115) Fixed the bugs and warnings in atspi relationship APIS
876 efl_access_relation_set_free(&sd->relations);
878 sd->relations = NULL;
881 //TIZEN_ONLY(20161122): add state_notify api
883 * Notify accessibility clients about current state of object
885 * @param mask bitfield with accessibilty field type values that should be
888 static void _elm_atspi_accessibility_state_notify(Eo *obj, Efl_Access_State_Set mask)
890 Efl_Access_State_Set ss;
891 Efl_Access_State_Type type;
893 ss = efl_access_object_state_set_get(obj);
895 for (type = EFL_ACCESS_STATE_TYPE_INVALID;
896 type < EFL_ACCESS_STATE_TYPE_LAST_DEFINED;
899 if (STATE_TYPE_GET(mask, type))
901 efl_access_state_changed_signal_emit(
902 obj, type, STATE_TYPE_GET(ss, type) ? EINA_TRUE : EINA_FALSE);
908 _efl_access_object_state_notify(Eo *obj, Efl_Access_Object_Data *data EINA_UNUSED, Efl_Access_State_Set mask, Eina_Bool recursive)
910 _elm_atspi_accessibility_state_notify(obj, mask);
914 Efl_Access_Object *child;
916 children = efl_access_object_access_children_get(obj);
917 EINA_LIST_FREE(children, child)
919 efl_access_object_state_notify(child, mask, recursive);
926 _efl_access_object_access_root_get(void)
929 root = efl_add(ELM_ATSPI_APP_OBJECT_CLASS, efl_main_loop_get());
935 _efl_access_object_efl_object_destructor(Eo *obj, Efl_Access_Object_Data *pd)
937 eina_stringshare_del(pd->name);
938 eina_stringshare_del(pd->description);
939 eina_stringshare_del(pd->translation_domain);
940 efl_access_relation_set_free(&pd->relations);
941 //TIZEN_ONLY(20181211): Fix for missing unregistration of atspi objects
942 unregister_atspi_object_in_bridge(obj);
945 efl_destructor(efl_super(obj, EFL_ACCESS_OBJECT_MIXIN));
949 _efl_access_shutdown(void)
951 Efl_Access_Event_Handler *hdl;
953 EINA_LIST_FREE(global_callbacks, hdl)
959 //TIZEN_ONLY(20171211): Keep Tizen Legacy API
961 elm_atspi_accessible_relationship_append(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *relation_object)
963 return efl_access_object_relationship_append(obj, type, relation_object);
967 elm_atspi_accessible_relationship_remove(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Relation_Type type, const Elm_Interface_Atspi_Accessible *relation_object)
969 efl_access_object_relationship_remove(obj, type, relation_object);
973 elm_atspi_accessible_translation_domain_get(const Elm_Interface_Atspi_Accessible *obj)
975 return efl_access_object_translation_domain_get(obj);
979 elm_atspi_accessible_translation_domain_set(Elm_Interface_Atspi_Accessible *obj, const char *domain)
981 efl_access_object_translation_domain_set(obj, domain);
985 elm_atspi_accessible_localized_role_name_get(const Elm_Interface_Atspi_Accessible *obj)
987 return efl_access_object_localized_role_name_get(obj);
990 EAPI void elm_atspi_accessible_name_set(Elm_Interface_Atspi_Accessible *obj, const char *name)
992 efl_access_object_i18n_name_set(obj, name);
996 elm_atspi_accessible_name_get(const Elm_Interface_Atspi_Accessible *obj)
998 return efl_access_object_i18n_name_get(obj);
1002 elm_atspi_accessible_name_cb_set(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Reading_Info_Cb name_cb, const void *data)
1004 efl_access_object_name_cb_set(obj, name_cb, data);
1007 EAPI Elm_Atspi_Relation_Set
1008 elm_atspi_accessible_relation_set_get(const Elm_Interface_Atspi_Accessible *obj)
1010 return efl_access_object_relation_set_get(obj);
1014 elm_atspi_accessible_role_set(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Role role)
1016 efl_access_object_role_set(obj, role);
1020 elm_atspi_accessible_role_get(const Elm_Interface_Atspi_Accessible *obj)
1022 return efl_access_object_role_get(obj);
1025 EAPI Eina_List *elm_atspi_accessible_children_get(const Elm_Interface_Atspi_Accessible *obj)
1027 return efl_access_object_access_children_get(obj);
1031 elm_atspi_accessible_role_name_get(const Elm_Interface_Atspi_Accessible *obj)
1033 return efl_access_object_role_name_get(obj);
1037 elm_atspi_accessible_attributes_get(const Elm_Interface_Atspi_Accessible *obj)
1039 return efl_access_object_attributes_get(obj);
1043 elm_atspi_accessible_reading_info_type_set(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Reading_Info_Type_Mask reading_info)
1045 efl_access_object_reading_info_type_set(obj, (Efl_Access_Reading_Info_Type_Mask)reading_info);
1048 EAPI Elm_Atspi_Reading_Info_Type_Mask
1049 elm_atspi_accessible_reading_info_type_get(const Elm_Interface_Atspi_Accessible *obj)
1051 return (Elm_Atspi_Reading_Info_Type_Mask)efl_access_object_reading_info_type_get(obj);
1055 elm_atspi_accessible_index_in_parent_get(const Elm_Interface_Atspi_Accessible *obj)
1057 return efl_access_object_index_in_parent_get(obj);
1061 elm_atspi_accessible_description_set(Elm_Interface_Atspi_Accessible *obj, const char *description)
1063 efl_access_object_description_set(obj, description);
1067 elm_atspi_accessible_description_get(const Elm_Interface_Atspi_Accessible *obj)
1069 return efl_access_object_description_get(obj);
1073 elm_atspi_accessible_description_cb_set(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Reading_Info_Cb description_cb, const void *data)
1075 efl_access_object_description_cb_set(obj, description_cb, data);
1079 elm_atspi_accessible_gesture_cb_set(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_Gesture_Cb gesture_cb, const void *data)
1081 efl_access_object_gesture_cb_set(obj, gesture_cb, data);
1085 elm_atspi_accessible_parent_set(Elm_Interface_Atspi_Accessible *obj, Elm_Interface_Atspi_Accessible *parent)
1087 efl_parent_set(obj, parent);
1090 EAPI Elm_Interface_Atspi_Accessible *
1091 elm_atspi_accessible_parent_get(const Elm_Interface_Atspi_Accessible *obj)
1093 //TIZEN_ONLY(20181024): Fix parent-children incosistencies in atspi tree
1094 return efl_access_object_access_parent_get(obj);
1098 EAPI Elm_Atspi_State_Set
1099 elm_atspi_accessible_state_set_get(const Elm_Interface_Atspi_Accessible *obj)
1101 return efl_access_object_state_set_get(obj);
1105 elm_atspi_accessible_can_highlight_set(Elm_Interface_Atspi_Accessible *obj, Eina_Bool can_highlight)
1107 efl_access_object_can_highlight_set(obj, can_highlight);
1111 elm_atspi_accessible_can_highlight_get(const Elm_Interface_Atspi_Accessible *obj)
1113 return efl_access_object_can_highlight_get(obj);
1117 elm_atspi_accessible_attribute_append(Elm_Interface_Atspi_Accessible *obj, const char *key, const char *value)
1119 efl_access_object_attribute_append(obj, key, value);
1123 elm_atspi_accessible_attributes_clear(Elm_Interface_Atspi_Accessible *obj)
1125 efl_access_object_attributes_clear(obj);
1129 elm_atspi_accessible_relationships_clear(Elm_Interface_Atspi_Accessible *obj)
1131 efl_access_object_relationships_clear(obj);
1135 elm_atspi_accessible_state_notify(Elm_Interface_Atspi_Accessible *obj, Elm_Atspi_State_Set state_types_mask, Eina_Bool recursive)
1137 efl_access_object_state_notify(obj, state_types_mask, recursive);
1140 EAPI void elm_atspi_relation_set_free(Elm_Atspi_Relation_Set *set)
1142 efl_access_relation_set_free(set);
1145 EAPI Elm_Atspi_Relation_Set elm_atspi_relation_set_clone(const Elm_Atspi_Relation_Set *set)
1147 return efl_access_relation_set_clone(set);
1150 EAPI void elm_atspi_relation_free(Elm_Atspi_Relation *relation)
1152 efl_access_relation_free(relation);
1155 EAPI Elm_Atspi_Relation * elm_atspi_relation_clone(const Elm_Atspi_Relation *relation)
1157 return efl_access_relation_clone(relation);
1160 EAPI Eina_Bool elm_atspi_relation_set_relation_append(Elm_Atspi_Relation_Set *set, Elm_Atspi_Relation_Type type, const Eo *rel_obj)
1162 return efl_access_relation_set_relation_append(set, type, rel_obj);
1165 EAPI void elm_atspi_relation_set_relation_remove(Elm_Atspi_Relation_Set *set, Elm_Atspi_Relation_Type type, const Eo *rel_obj)
1167 efl_access_relation_set_relation_remove(set, type, rel_obj);
1170 EAPI void elm_atspi_relation_set_relation_type_remove(Elm_Atspi_Relation_Set *set, Elm_Atspi_Relation_Type type)
1172 efl_access_relation_set_relation_type_remove(set, type);
1175 EAPI void elm_atspi_attributes_list_free(Eina_List *list)
1177 efl_access_attributes_list_free(list);
1181 #include "efl_access_object.eo.c"