1 #include <Elementary.h>
4 static const char ACCESS_SMART_NAME[] = "elm_access";
6 ELM_INTERNAL_SMART_SUBCLASS_NEW
7 (ACCESS_SMART_NAME, _elm_access, Elm_Widget_Smart_Class,
8 Elm_Widget_Smart_Class, elm_widget_smart_class_get, NULL);
10 static Eina_Bool mouse_event_enable = EINA_TRUE;
11 static Eina_Bool read_mode = EINA_FALSE;
13 static Evas_Object * _elm_access_add(Evas_Object *parent);
16 _elm_access_smart_add(Evas_Object *obj)
18 EVAS_SMART_DATA_ALLOC(obj, Elm_Widget_Smart_Data);
19 ELM_WIDGET_CLASS(_elm_access_parent_sc)->base.add(obj);
21 elm_widget_can_focus_set(obj, EINA_TRUE);
25 _elm_access_smart_on_focus(Evas_Object *obj)
27 evas_object_focus_set(obj, elm_widget_focus_get(obj));
33 _elm_access_smart_activate(Evas_Object *obj, Elm_Activate act)
35 if (act != ELM_ACTIVATE_DEFAULT) return EINA_FALSE;
37 Elm_Access_Info *ac = evas_object_data_get(obj, "_elm_access");
38 if (!ac) return EINA_FALSE;
41 ac->activate(ac->activate_data, ac->part_object,
42 (Elm_Object_Item *)ac->widget_item);
48 _elm_access_smart_set_user(Elm_Widget_Smart_Class *sc)
50 sc->base.add = _elm_access_smart_add;
52 /* not a 'focus chain manager' */
53 sc->focus_next = NULL;
54 sc->focus_direction = NULL;
55 sc->on_focus = _elm_access_smart_on_focus;
56 sc->activate = _elm_access_smart_activate;
61 typedef struct _Mod_Api Mod_Api;
65 void (*out_read) (const char *txt);
66 void (*out_read_done) (void);
67 void (*out_cancel) (void);
68 void (*out_done_callback_set) (void (*func) (void *data), const void *data);
71 static int initted = 0;
72 static Mod_Api *mapi = NULL;
79 if (initted > 1) return;
80 if (!(m = _elm_module_find_as("access/api"))) return;
81 m->api = malloc(sizeof(Mod_Api));
84 ((Mod_Api *)(m->api) )->out_read = // called to read out some text
85 _elm_module_symbol_get(m, "out_read");
86 ((Mod_Api *)(m->api) )->out_read_done = // called to set a done marker so when it is reached the done callback is called
87 _elm_module_symbol_get(m, "out_read_done");
88 ((Mod_Api *)(m->api) )->out_cancel = // called to read out some text
89 _elm_module_symbol_get(m, "out_cancel");
90 ((Mod_Api *)(m->api) )->out_done_callback_set = // called when last read done
91 _elm_module_symbol_get(m, "out_done_callback_set");
96 _access_shutdown(void)
99 if (initted == 0) return;
100 if (!(m = _elm_module_find_as("access/api"))) return;
110 static Elm_Access_Item *
111 _access_add_set(Elm_Access_Info *ac, int type)
116 if (!ac) return NULL;
117 EINA_LIST_FOREACH(ac->items, l, ai)
119 if (ai->type == type)
123 if (ai->data) eina_stringshare_del(ai->data);
130 ai = calloc(1, sizeof(Elm_Access_Item));
132 ac->items = eina_list_prepend(ac->items, ai);
137 _access_highlight_object_get(Evas_Object *obj)
141 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
144 ho = evas_object_data_get(o, "_elm_access_target");
150 _access_highlight_read(Elm_Access_Info *ac, Evas_Object *obj)
156 /*FIXME: TIZEN only - read at once because Tizen TTS engine performance is not good */
157 strbuf = eina_strbuf_new();
159 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
162 if (ac->on_highlight) ac->on_highlight(ac->on_highlight_data);
163 _elm_access_object_hilight(obj);
165 for (type = ELM_ACCESS_INFO_FIRST + 1; type < ELM_ACCESS_INFO_LAST; type++)
167 txt = _elm_access_text_get(ac, type, obj);
168 if (txt && (strlen(txt) > 0))
170 if (eina_strbuf_length_get(strbuf) > 0)
171 eina_strbuf_append_printf(strbuf, ", %s", txt);
173 eina_strbuf_append(strbuf, txt);
180 txt = eina_strbuf_string_steal(strbuf);
181 eina_strbuf_free(strbuf);
183 _elm_access_say(txt);
188 _access_obj_over_timeout_cb(void *data)
193 if (!data) return EINA_FALSE;
195 ac = evas_object_data_get(data, "_elm_access");
196 if (!ac) return EINA_FALSE;
198 ho = _access_highlight_object_get(data);
199 if (ho != data) _access_highlight_read(ac, data);
201 ac->delay_timer = NULL;
206 _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
209 if (!mouse_event_enable) return;
211 ac = evas_object_data_get(data, "_elm_access");
216 ecore_timer_del(ac->delay_timer);
217 ac->delay_timer = NULL;
219 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
220 ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data);
224 _access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
227 if (!mouse_event_enable) return;
229 ac = evas_object_data_get(data, "_elm_access");
232 _elm_access_object_unhilight(data);
235 ecore_timer_del(ac->delay_timer);
236 ac->delay_timer = NULL;
241 _access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
243 _elm_access_object_unregister(data, obj);
245 // _elm_access_edje_object_part_object_register(); set below object data
246 evas_object_data_del(obj, "_part_access_obj");
250 _access_read_done(void *data __UNUSED__)
252 printf("read done\n");
253 // FIXME: produce event here
257 _access_2nd_click_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
261 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
262 _access_2nd_click_del_cb, NULL);
263 t = evas_object_data_get(obj, "_elm_2nd_timeout");
267 evas_object_data_del(obj, "_elm_2nd_timeout");
272 _access_2nd_click_timeout_cb(void *data)
274 evas_object_event_callback_del_full(data, EVAS_CALLBACK_DEL,
275 _access_2nd_click_del_cb, NULL);
276 evas_object_data_del(data, "_elm_2nd_timeout");
281 _access_obj_hilight_del_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
283 _elm_access_object_hilight_disable(e);
287 _access_obj_hilight_hide_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
289 _elm_access_object_hilight_disable(e);
293 _access_obj_hilight_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
298 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
300 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
301 evas_object_move(o, x, y);
305 _access_obj_hilight_resize_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
310 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
312 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
313 evas_object_resize(o, w, h);
317 _elm_access_mouse_event_enabled_set(Eina_Bool enabled)
320 if (mouse_event_enable == enabled) return;
321 mouse_event_enable = enabled;
325 _elm_access_read_mode_set(Eina_Bool enabled)
328 if (read_mode == enabled) return;
333 _elm_access_read_mode_get()
339 _elm_access_shutdown()
345 _access_order_del_cb(void *data,
348 void *event_info __UNUSED__)
350 Elm_Widget_Item *item = data;
352 item->access_order = eina_list_remove(item->access_order, obj);
356 _elm_access_widget_item_access_order_set(Elm_Widget_Item *item,
364 _elm_access_widget_item_access_order_unset(item);
366 EINA_LIST_FOREACH(objs, l, o)
368 evas_object_event_callback_add(o, EVAS_CALLBACK_DEL,
369 _access_order_del_cb, item);
372 item->access_order = objs;
376 _elm_access_widget_item_access_order_get(const Elm_Widget_Item *item)
378 if (!item) return NULL;
379 return item->access_order;
383 _elm_access_widget_item_access_order_unset(Elm_Widget_Item *item)
385 Eina_List *l, *l_next;
390 EINA_LIST_FOREACH_SAFE(item->access_order, l, l_next, o)
392 evas_object_event_callback_del_full
393 (o, EVAS_CALLBACK_DEL, _access_order_del_cb, item);
394 item->access_order = eina_list_remove_list(item->access_order, l);
397 //-------------------------------------------------------------------------//
399 _elm_access_highlight_set(Evas_Object* obj)
406 ho = _access_highlight_object_get(obj);
407 if (ho == obj) return;
409 ac = evas_object_data_get(obj, "_elm_access");
412 _access_highlight_read(ac, obj);
416 _elm_access_clear(Elm_Access_Info *ac)
423 ecore_timer_del(ac->delay_timer);
424 ac->delay_timer = NULL;
426 EINA_LIST_FREE(ac->items, ai)
430 if (ai->data) eina_stringshare_del(ai->data);
437 _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text)
439 Elm_Access_Item *ai = _access_add_set(ac, type);
441 ai->data = eina_stringshare_add(text);
445 _elm_access_callback_set(Elm_Access_Info *ac, int type, Elm_Access_Info_Cb func, const void *data)
447 Elm_Access_Item *ai = _access_add_set(ac, type);
454 _elm_access_on_highlight_hook_set(Elm_Access_Info *ac,
455 Elm_Access_On_Highlight_Cb func,
459 ac->on_highlight = func;
460 ac->on_highlight_data = data;
464 _elm_access_activate_callback_set(Elm_Access_Info *ac,
465 Elm_Access_Activate_Cb func,
470 ac->activate_data = data;
474 _elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act)
476 Evas_Object *highlight;
478 highlight = _access_highlight_object_get(obj);
479 if (!highlight) return;
481 _elm_access_read_mode_set(EINA_FALSE);
483 if (!elm_object_focus_get(highlight))
484 elm_object_focus_set(highlight, EINA_TRUE);
486 elm_widget_activate(highlight, act);
491 _elm_access_highlight_cycle(Evas_Object *obj, Elm_Focus_Direction dir)
494 ho = _access_highlight_object_get(obj);
497 /* find highlight root */
500 ELM_WIDGET_DATA_GET(ho, sd);
501 if (sd->highlight_root)
503 /* change highlight root */
507 ho = elm_widget_parent_get(ho);
511 _elm_access_read_mode_set(EINA_TRUE);
512 elm_widget_focus_cycle(obj, dir);
513 _elm_access_read_mode_set(EINA_FALSE);
517 _elm_access_text_get(const Elm_Access_Info *ac, int type, const Evas_Object *obj)
522 if (!ac) return NULL;
523 EINA_LIST_FOREACH(ac->items, l, ai)
525 if (ai->type == type)
527 if (ai->func) return ai->func((void *)(ai->data), (Evas_Object *)obj);
528 else if (ai->data) return strdup(ai->data);
536 _elm_access_read(Elm_Access_Info *ac, int type, const Evas_Object *obj)
538 char *txt = _elm_access_text_get(ac, type, obj);
540 if (txt && strlen(txt) == 0) return; /* Tizen only: TTS engine does not work properly */
545 if (mapi->out_done_callback_set)
546 mapi->out_done_callback_set(_access_read_done, NULL);
547 if (type == ELM_ACCESS_DONE)
549 if (mapi->out_read_done) mapi->out_read_done();
551 else if (type == ELM_ACCESS_CANCEL)
553 if (mapi->out_cancel) mapi->out_cancel();
557 if (txt && mapi->out_read) mapi->out_read(txt);
564 _elm_access_say(const char *txt)
566 if (!_elm_config->access_mode) return;
568 if (txt && strlen(txt) == 0) return; /* Tizen only: TTS engine does not work properly */
573 if (mapi->out_done_callback_set)
574 mapi->out_done_callback_set(_access_read_done, NULL);
575 if (mapi->out_cancel) mapi->out_cancel();
578 if (mapi->out_read) mapi->out_read(txt);
579 //if (mapi->out_read) mapi->out_read(".\n"); /* TIZEN only: Tizen TTS engine performance is not good */
581 if (mapi->out_read_done) mapi->out_read_done();
585 EAPI Elm_Access_Info *
586 _elm_access_object_get(const Evas_Object *obj)
588 return evas_object_data_get(obj, "_elm_access");
592 _elm_access_object_hilight(Evas_Object *obj)
595 Evas_Coord x, y, w, h;
597 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
600 o = edje_object_add(evas_object_evas_get(obj));
601 evas_object_name_set(o, "_elm_access_disp");
602 evas_object_layer_set(o, ELM_OBJECT_LAYER_TOOLTIP);
606 Evas_Object *ptarget = evas_object_data_get(o, "_elm_access_target");
609 evas_object_data_del(o, "_elm_access_target");
610 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
612 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
613 _access_obj_hilight_del_cb, NULL);
614 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
615 _access_obj_hilight_hide_cb, NULL);
616 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
617 _access_obj_hilight_move_cb, NULL);
618 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
619 _access_obj_hilight_resize_cb, NULL);
622 evas_object_data_set(o, "_elm_access_target", obj);
623 elm_widget_parent_highlight_set(obj, EINA_TRUE);
625 elm_widget_theme_object_set(obj, o, "access", "base", "default");
627 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
628 _access_obj_hilight_del_cb, NULL);
629 evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE,
630 _access_obj_hilight_hide_cb, NULL);
631 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
632 _access_obj_hilight_move_cb, NULL);
633 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
634 _access_obj_hilight_resize_cb, NULL);
635 evas_object_raise(o);
636 evas_object_geometry_get(obj, &x, &y, &w, &h);
637 evas_object_move(o, x, y);
638 evas_object_resize(o, w, h);
643 _elm_access_object_unhilight(Evas_Object *obj)
645 Evas_Object *o, *ptarget;
647 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
649 ptarget = evas_object_data_get(o, "_elm_access_target");
652 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
653 _access_obj_hilight_del_cb, NULL);
654 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
655 _access_obj_hilight_hide_cb, NULL);
656 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
657 _access_obj_hilight_move_cb, NULL);
658 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
659 _access_obj_hilight_resize_cb, NULL);
661 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
666 _content_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj,
667 void *event_info __UNUSED__)
669 Evas_Object *accessobj;
673 if (!accessobj) return;
675 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
676 evas_object_resize(accessobj, w, h);
680 _content_move(void *data, Evas *e __UNUSED__, Evas_Object *obj,
681 void *event_info __UNUSED__)
683 Evas_Object *accessobj;
687 if (!accessobj) return;
689 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
690 evas_object_move(accessobj, x, y);
694 _access_object_register(Evas_Object *obj, Evas_Object *parent)
698 Evas_Coord x, y, w, h;
700 if (!obj) return NULL;
702 /* create access object */
703 ao = _elm_access_add(parent);
704 if (!ao) return NULL;
706 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
707 _content_resize, ao);
708 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
711 evas_object_geometry_get(obj, &x, &y, &w, &h);
712 evas_object_move(ao, x, y);
713 evas_object_resize(ao, w, h);
714 evas_object_show(ao);
716 /* register access object */
717 _elm_access_object_register(ao, obj);
719 /* set access object */
720 evas_object_data_set(obj, "_part_access_obj", ao);
722 /* set owner part object */
723 ac = evas_object_data_get(ao, "_elm_access");
724 ac->part_object = obj;
730 _access_object_unregister(Evas_Object *obj)
737 ao = evas_object_data_get(obj, "_part_access_obj");
741 evas_object_data_del(obj, "_part_access_obj");
743 /* delete callbacks */
744 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE,
745 _content_resize, ao);
746 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE,
749 /* unregister access object */
750 _elm_access_object_unregister(ao, obj);
756 /* button, check, label etc. */
757 ac = evas_object_data_get(obj, "_elm_access");
758 if (ac && ac->hoverobj)
759 _elm_access_object_unregister(obj, ac->hoverobj);
764 _elm_access_edje_object_part_object_register(Evas_Object* obj,
765 const Evas_Object *eobj,
768 Evas_Object *ao, *po;
770 po = (Evas_Object *)edje_object_part_object_get(eobj, part);
771 if (!obj || !po) return NULL;
773 /* check previous access object */
774 ao = evas_object_data_get(po, "_part_access_obj");
776 _elm_access_edje_object_part_object_unregister(obj, eobj, part);
778 ao = _access_object_register(po, obj);
783 //FIXME: unused obj should be removed from here and each widget.
785 _elm_access_edje_object_part_object_unregister(Evas_Object* obj __UNUSED__,
786 const Evas_Object *eobj,
791 po = (Evas_Object *)edje_object_part_object_get(eobj, part);
794 _access_object_unregister(po);
798 _elm_access_object_hilight_disable(Evas *e)
800 Evas_Object *o, *ptarget;
802 o = evas_object_name_find(e, "_elm_access_disp");
804 ptarget = evas_object_data_get(o, "_elm_access_target");
807 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
808 _access_obj_hilight_del_cb, NULL);
809 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
810 _access_obj_hilight_hide_cb, NULL);
811 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
812 _access_obj_hilight_move_cb, NULL);
813 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
814 _access_obj_hilight_resize_cb, NULL);
817 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
821 _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
825 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_IN,
826 _access_obj_mouse_in_cb, obj);
827 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
828 _access_obj_mouse_out_cb, obj);
829 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_DEL,
830 _access_obj_del_cb, obj);
831 ac = calloc(1, sizeof(Elm_Access_Info));
832 evas_object_data_set(obj, "_elm_access", ac);
834 ac->hoverobj = hoverobj;
838 _elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
842 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
843 _access_obj_mouse_in_cb, obj);
844 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
845 _access_obj_mouse_out_cb, obj);
846 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
847 _access_obj_del_cb, obj);
849 ac = evas_object_data_get(obj, "_elm_access");
850 evas_object_data_del(obj, "_elm_access");
853 _elm_access_clear(ac);
859 _elm_access_widget_item_register(Elm_Widget_Item *item)
861 Evas_Object *ao, *ho;
862 Evas_Coord x, y, w, h;
865 ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
867 /* check previous access object */
868 if (item->access_obj)
869 _elm_access_widget_item_unregister(item);
871 // create access object
873 ao = _elm_access_add(item->widget);
876 evas_object_event_callback_add(ho, EVAS_CALLBACK_RESIZE,
877 _content_resize, ao);
878 evas_object_event_callback_add(ho, EVAS_CALLBACK_MOVE,
881 evas_object_geometry_get(ho, &x, &y, &w, &h);
882 evas_object_move(ao, x, y);
883 evas_object_resize(ao, w, h);
884 evas_object_show(ao);
886 // register access object
887 _elm_access_object_register(ao, ho);
889 item->access_obj = ao;
891 /* set owner widget item */
892 ac = evas_object_data_get(ao, "_elm_access");
893 ac->widget_item = item;
897 _elm_access_widget_item_unregister(Elm_Widget_Item *item)
901 ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
903 if (!item->access_obj) return;
906 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_RESIZE,
907 _content_resize, item->access_obj);
908 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_MOVE,
909 _content_move, item->access_obj);
911 _elm_access_object_unregister(item->access_obj, ho);
913 evas_object_del(item->access_obj);
914 item->access_obj = NULL;
918 _elm_access_2nd_click_timeout(Evas_Object *obj)
922 t = evas_object_data_get(obj, "_elm_2nd_timeout");
926 evas_object_data_del(obj, "_elm_2nd_timeout");
927 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
928 _access_2nd_click_del_cb, NULL);
931 t = ecore_timer_add(0.3, _access_2nd_click_timeout_cb, obj);
932 evas_object_data_set(obj, "_elm_2nd_timeout", t);
933 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
934 _access_2nd_click_del_cb, NULL);
939 _elm_access_add(Evas_Object *parent)
943 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
945 obj = elm_widget_add(_elm_access_smart_class_new(), parent);
946 if (!obj) return NULL;
948 if (!elm_widget_sub_object_add(parent, obj))
949 ERR("could not add %p as sub object of %p", obj, parent);
955 elm_access_object_register(Evas_Object *obj, Evas_Object *parent)
957 return _access_object_register(obj, parent);
961 elm_access_object_unregister(Evas_Object *obj)
963 _access_object_unregister(obj);
967 elm_access_object_get(const Evas_Object *obj)
969 return evas_object_data_get(obj, "_part_access_obj");
973 elm_access_info_set(Evas_Object *obj, int type, const char *text)
975 _elm_access_text_set(_elm_access_object_get(obj), type, text);
979 elm_access_info_get(const Evas_Object *obj, int type)
981 return _elm_access_text_get(_elm_access_object_get(obj), type, obj);
985 elm_access_info_cb_set(Evas_Object *obj, int type,
986 Elm_Access_Info_Cb func, const void *data)
988 _elm_access_callback_set(_elm_access_object_get(obj), type, func, data);
992 elm_access_activate_cb_set(Evas_Object *obj,
993 Elm_Access_Activate_Cb func, void *data)
997 ac = _elm_access_object_get(obj);
1000 ac->activate = func;
1001 ac->activate_data = data;
1005 elm_access_say(const char *text)
1009 _elm_access_say(text);
1013 elm_access_highlight_set(Evas_Object* obj)
1015 _elm_access_highlight_set(obj);
1019 elm_access_external_info_set(Evas_Object *obj, const char *text)
1021 _elm_access_text_set
1022 (_elm_access_object_get(obj), ELM_ACCESS_CONTEXT_INFO, text);
1026 elm_access_external_info_get(const Evas_Object *obj)
1028 Elm_Access_Info *ac;
1030 ac = _elm_access_object_get(obj);
1031 return _elm_access_text_get(ac, ELM_ACCESS_CONTEXT_INFO, obj);