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_obj_over_timeout_cb(void *data)
155 if (!data) return EINA_FALSE;
157 ho = _access_highlight_object_get(data);
158 if (ho == data) return EINA_FALSE;
160 ac = evas_object_data_get(data, "_elm_access");
161 if (!ac) return EINA_FALSE;
163 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
165 if (ac->on_highlight) ac->on_highlight(ac->on_highlight_data);
166 _elm_access_object_hilight(data);
167 _elm_access_read(ac, ELM_ACCESS_CANCEL, data);
168 _elm_access_read(ac, ELM_ACCESS_INFO, data);
169 _elm_access_read(ac, ELM_ACCESS_TYPE, data);
170 _elm_access_read(ac, ELM_ACCESS_STATE, data);
171 _elm_access_read(ac, ELM_ACCESS_CONTEXT_INFO, data);
172 _elm_access_read(ac, ELM_ACCESS_DONE, data);
174 ac->delay_timer = NULL;
179 _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
182 if (!mouse_event_enable) return;
184 ac = evas_object_data_get(data, "_elm_access");
189 ecore_timer_del(ac->delay_timer);
190 ac->delay_timer = NULL;
192 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
193 ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data);
197 _access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
200 if (!mouse_event_enable) return;
202 ac = evas_object_data_get(data, "_elm_access");
205 _elm_access_object_unhilight(data);
208 ecore_timer_del(ac->delay_timer);
209 ac->delay_timer = NULL;
214 _access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
216 _elm_access_object_unregister(data, obj);
218 // _elm_access_edje_object_part_object_register(); set below object data
219 evas_object_data_del(obj, "_part_access_obj");
223 _access_read_done(void *data __UNUSED__)
225 printf("read done\n");
226 // FIXME: produce event here
230 _access_2nd_click_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
234 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
235 _access_2nd_click_del_cb, NULL);
236 t = evas_object_data_get(obj, "_elm_2nd_timeout");
240 evas_object_data_del(obj, "_elm_2nd_timeout");
245 _access_2nd_click_timeout_cb(void *data)
247 evas_object_event_callback_del_full(data, EVAS_CALLBACK_DEL,
248 _access_2nd_click_del_cb, NULL);
249 evas_object_data_del(data, "_elm_2nd_timeout");
254 _access_obj_hilight_del_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
256 _elm_access_object_hilight_disable(e);
260 _access_obj_hilight_hide_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
262 _elm_access_object_hilight_disable(e);
266 _access_obj_hilight_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
271 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
273 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
274 evas_object_move(o, x, y);
278 _access_obj_hilight_resize_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
283 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
285 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
286 evas_object_resize(o, w, h);
290 _elm_access_mouse_event_enabled_set(Eina_Bool enabled)
293 if (mouse_event_enable == enabled) return;
294 mouse_event_enable = enabled;
298 _elm_access_read_mode_set(Eina_Bool enabled)
301 if (read_mode == enabled) return;
306 _elm_access_read_mode_get()
312 _elm_access_shutdown()
318 _access_order_del_cb(void *data,
321 void *event_info __UNUSED__)
323 Elm_Widget_Item *item = data;
325 item->access_order = eina_list_remove(item->access_order, obj);
329 _elm_access_widget_item_access_order_set(Elm_Widget_Item *item,
337 _elm_access_widget_item_access_order_unset(item);
339 EINA_LIST_FOREACH(objs, l, o)
341 evas_object_event_callback_add(o, EVAS_CALLBACK_DEL,
342 _access_order_del_cb, item);
345 item->access_order = objs;
349 _elm_access_widget_item_access_order_get(const Elm_Widget_Item *item)
351 if (!item) return NULL;
352 return item->access_order;
356 _elm_access_widget_item_access_order_unset(Elm_Widget_Item *item)
358 Eina_List *l, *l_next;
363 EINA_LIST_FOREACH_SAFE(item->access_order, l, l_next, o)
365 evas_object_event_callback_del_full
366 (o, EVAS_CALLBACK_DEL, _access_order_del_cb, item);
367 item->access_order = eina_list_remove_list(item->access_order, l);
370 //-------------------------------------------------------------------------//
372 _elm_access_highlight_set(Evas_Object* obj)
374 _access_obj_over_timeout_cb(obj);
378 _elm_access_clear(Elm_Access_Info *ac)
385 ecore_timer_del(ac->delay_timer);
386 ac->delay_timer = NULL;
388 EINA_LIST_FREE(ac->items, ai)
392 if (ai->data) eina_stringshare_del(ai->data);
399 _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text)
401 Elm_Access_Item *ai = _access_add_set(ac, type);
403 ai->data = eina_stringshare_add(text);
407 _elm_access_callback_set(Elm_Access_Info *ac, int type, Elm_Access_Info_Cb func, const void *data)
409 Elm_Access_Item *ai = _access_add_set(ac, type);
416 _elm_access_on_highlight_hook_set(Elm_Access_Info *ac,
417 Elm_Access_On_Highlight_Cb func,
421 ac->on_highlight = func;
422 ac->on_highlight_data = data;
426 _elm_access_activate_callback_set(Elm_Access_Info *ac,
427 Elm_Access_Activate_Cb func,
432 ac->activate_data = data;
436 _elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act)
438 Evas_Object *highlight;
440 highlight = _access_highlight_object_get(obj);
441 if (!highlight) return;
443 _elm_access_read_mode_set(EINA_FALSE);
445 if (!elm_object_focus_get(highlight))
446 elm_object_focus_set(highlight, EINA_TRUE);
448 elm_widget_activate(highlight, act);
453 _elm_access_highlight_cycle(Evas_Object *obj, Elm_Focus_Direction dir)
456 ho = _access_highlight_object_get(obj);
459 /* find highlight root */
462 ELM_WIDGET_DATA_GET(ho, sd);
463 if (sd->highlight_root)
465 /* change highlight root */
469 ho = elm_widget_parent_get(ho);
473 _elm_access_read_mode_set(EINA_TRUE);
474 elm_widget_focus_cycle(obj, dir);
475 _elm_access_read_mode_set(EINA_FALSE);
479 _elm_access_text_get(const Elm_Access_Info *ac, int type, const Evas_Object *obj)
484 if (!ac) return NULL;
485 EINA_LIST_FOREACH(ac->items, l, ai)
487 if (ai->type == type)
489 if (ai->func) return ai->func((void *)(ai->data), (Evas_Object *)obj);
490 else if (ai->data) return strdup(ai->data);
498 _elm_access_read(Elm_Access_Info *ac, int type, const Evas_Object *obj)
500 char *txt = _elm_access_text_get(ac, type, obj);
502 if (txt && strlen(txt) == 0) return; /* Tizen only: TTS engine does not work properly */
507 if (mapi->out_done_callback_set)
508 mapi->out_done_callback_set(_access_read_done, NULL);
509 if (type == ELM_ACCESS_DONE)
511 if (mapi->out_read_done) mapi->out_read_done();
513 else if (type == ELM_ACCESS_CANCEL)
515 if (mapi->out_cancel) mapi->out_cancel();
519 if (txt && mapi->out_read) mapi->out_read(txt);
526 _elm_access_say(const char *txt)
528 if (!_elm_config->access_mode) return;
530 if (txt && strlen(txt) == 0) return; /* Tizen only: TTS engine does not work properly */
535 if (mapi->out_done_callback_set)
536 mapi->out_done_callback_set(_access_read_done, NULL);
537 if (mapi->out_cancel) mapi->out_cancel();
540 if (mapi->out_read) mapi->out_read(txt);
541 if (mapi->out_read) mapi->out_read(".\n");
543 if (mapi->out_read_done) mapi->out_read_done();
547 EAPI Elm_Access_Info *
548 _elm_access_object_get(const Evas_Object *obj)
550 return evas_object_data_get(obj, "_elm_access");
554 _elm_access_object_hilight(Evas_Object *obj)
557 Evas_Coord x, y, w, h;
559 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
562 o = edje_object_add(evas_object_evas_get(obj));
563 evas_object_name_set(o, "_elm_access_disp");
564 evas_object_layer_set(o, ELM_OBJECT_LAYER_TOOLTIP);
568 Evas_Object *ptarget = evas_object_data_get(o, "_elm_access_target");
571 evas_object_data_del(o, "_elm_access_target");
572 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
574 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
575 _access_obj_hilight_del_cb, NULL);
576 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
577 _access_obj_hilight_hide_cb, NULL);
578 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
579 _access_obj_hilight_move_cb, NULL);
580 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
581 _access_obj_hilight_resize_cb, NULL);
584 evas_object_data_set(o, "_elm_access_target", obj);
585 elm_widget_parent_highlight_set(obj, EINA_TRUE);
587 elm_widget_theme_object_set(obj, o, "access", "base", "default");
589 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
590 _access_obj_hilight_del_cb, NULL);
591 evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE,
592 _access_obj_hilight_hide_cb, NULL);
593 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
594 _access_obj_hilight_move_cb, NULL);
595 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
596 _access_obj_hilight_resize_cb, NULL);
597 evas_object_raise(o);
598 evas_object_geometry_get(obj, &x, &y, &w, &h);
599 evas_object_move(o, x, y);
600 evas_object_resize(o, w, h);
605 _elm_access_object_unhilight(Evas_Object *obj)
607 Evas_Object *o, *ptarget;
609 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
611 ptarget = evas_object_data_get(o, "_elm_access_target");
614 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
615 _access_obj_hilight_del_cb, NULL);
616 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
617 _access_obj_hilight_hide_cb, NULL);
618 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
619 _access_obj_hilight_move_cb, NULL);
620 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
621 _access_obj_hilight_resize_cb, NULL);
623 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
628 _content_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj,
629 void *event_info __UNUSED__)
631 Evas_Object *accessobj;
635 if (!accessobj) return;
637 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
638 evas_object_resize(accessobj, w, h);
642 _content_move(void *data, Evas *e __UNUSED__, Evas_Object *obj,
643 void *event_info __UNUSED__)
645 Evas_Object *accessobj;
649 if (!accessobj) return;
651 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
652 evas_object_move(accessobj, x, y);
656 _access_object_register(Evas_Object *obj, Evas_Object *parent)
660 Evas_Coord x, y, w, h;
662 if (!obj) return NULL;
664 /* create access object */
665 ao = _elm_access_add(parent);
666 if (!ao) return NULL;
668 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
669 _content_resize, ao);
670 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
673 evas_object_geometry_get(obj, &x, &y, &w, &h);
674 evas_object_move(ao, x, y);
675 evas_object_resize(ao, w, h);
676 evas_object_show(ao);
678 /* register access object */
679 _elm_access_object_register(ao, obj);
681 /* set access object */
682 evas_object_data_set(obj, "_part_access_obj", ao);
684 /* set owner part object */
685 ac = evas_object_data_get(ao, "_elm_access");
686 ac->part_object = obj;
692 _access_object_unregister(Evas_Object *obj)
699 ao = evas_object_data_get(obj, "_part_access_obj");
703 evas_object_data_del(obj, "_part_access_obj");
705 /* delete callbacks */
706 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE,
707 _content_resize, ao);
708 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE,
711 /* unregister access object */
712 _elm_access_object_unregister(ao, obj);
718 /* button, check, label etc. */
719 ac = evas_object_data_get(obj, "_elm_access");
720 if (ac && ac->hoverobj)
721 _elm_access_object_unregister(obj, ac->hoverobj);
726 _elm_access_edje_object_part_object_register(Evas_Object* obj,
727 const Evas_Object *eobj,
730 Evas_Object *ao, *po;
732 po = (Evas_Object *)edje_object_part_object_get(eobj, part);
733 if (!obj || !po) return NULL;
735 /* check previous access object */
736 ao = evas_object_data_get(po, "_part_access_obj");
738 _elm_access_edje_object_part_object_unregister(obj, eobj, part);
740 ao = _access_object_register(po, obj);
745 //FIXME: unused obj should be removed from here and each widget.
747 _elm_access_edje_object_part_object_unregister(Evas_Object* obj __UNUSED__,
748 const Evas_Object *eobj,
753 po = (Evas_Object *)edje_object_part_object_get(eobj, part);
756 _access_object_unregister(po);
760 _elm_access_object_hilight_disable(Evas *e)
762 Evas_Object *o, *ptarget;
764 o = evas_object_name_find(e, "_elm_access_disp");
766 ptarget = evas_object_data_get(o, "_elm_access_target");
769 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
770 _access_obj_hilight_del_cb, NULL);
771 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
772 _access_obj_hilight_hide_cb, NULL);
773 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
774 _access_obj_hilight_move_cb, NULL);
775 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
776 _access_obj_hilight_resize_cb, NULL);
779 elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
783 _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
787 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_IN,
788 _access_obj_mouse_in_cb, obj);
789 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
790 _access_obj_mouse_out_cb, obj);
791 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_DEL,
792 _access_obj_del_cb, obj);
793 ac = calloc(1, sizeof(Elm_Access_Info));
794 evas_object_data_set(obj, "_elm_access", ac);
796 ac->hoverobj = hoverobj;
800 _elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
804 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
805 _access_obj_mouse_in_cb, obj);
806 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
807 _access_obj_mouse_out_cb, obj);
808 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
809 _access_obj_del_cb, obj);
811 ac = evas_object_data_get(obj, "_elm_access");
812 evas_object_data_del(obj, "_elm_access");
815 _elm_access_clear(ac);
821 _elm_access_widget_item_register(Elm_Widget_Item *item)
823 Evas_Object *ao, *ho;
824 Evas_Coord x, y, w, h;
827 ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
829 /* check previous access object */
830 if (item->access_obj)
831 _elm_access_widget_item_unregister(item);
833 // create access object
835 ao = _elm_access_add(item->widget);
838 evas_object_event_callback_add(ho, EVAS_CALLBACK_RESIZE,
839 _content_resize, ao);
840 evas_object_event_callback_add(ho, EVAS_CALLBACK_MOVE,
843 evas_object_geometry_get(ho, &x, &y, &w, &h);
844 evas_object_move(ao, x, y);
845 evas_object_resize(ao, w, h);
846 evas_object_show(ao);
848 // register access object
849 _elm_access_object_register(ao, ho);
851 item->access_obj = ao;
853 /* set owner widget item */
854 ac = evas_object_data_get(ao, "_elm_access");
855 ac->widget_item = item;
859 _elm_access_widget_item_unregister(Elm_Widget_Item *item)
863 ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
865 if (!item->access_obj) return;
868 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_RESIZE,
869 _content_resize, item->access_obj);
870 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_MOVE,
871 _content_move, item->access_obj);
873 _elm_access_object_unregister(item->access_obj, ho);
875 evas_object_del(item->access_obj);
876 item->access_obj = NULL;
880 _elm_access_2nd_click_timeout(Evas_Object *obj)
884 t = evas_object_data_get(obj, "_elm_2nd_timeout");
888 evas_object_data_del(obj, "_elm_2nd_timeout");
889 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
890 _access_2nd_click_del_cb, NULL);
893 t = ecore_timer_add(0.3, _access_2nd_click_timeout_cb, obj);
894 evas_object_data_set(obj, "_elm_2nd_timeout", t);
895 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
896 _access_2nd_click_del_cb, NULL);
901 _elm_access_add(Evas_Object *parent)
905 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
907 obj = elm_widget_add(_elm_access_smart_class_new(), parent);
908 if (!obj) return NULL;
910 if (!elm_widget_sub_object_add(parent, obj))
911 ERR("could not add %p as sub object of %p", obj, parent);
917 elm_access_object_register(Evas_Object *obj, Evas_Object *parent)
919 return _access_object_register(obj, parent);
923 elm_access_object_unregister(Evas_Object *obj)
925 _access_object_unregister(obj);
929 elm_access_object_get(const Evas_Object *obj)
931 return evas_object_data_get(obj, "_part_access_obj");
935 elm_access_info_set(Evas_Object *obj, int type, const char *text)
937 _elm_access_text_set(_elm_access_object_get(obj), type, text);
941 elm_access_info_get(const Evas_Object *obj, int type)
943 return _elm_access_text_get(_elm_access_object_get(obj), type, obj);
947 elm_access_info_cb_set(Evas_Object *obj, int type,
948 Elm_Access_Info_Cb func, const void *data)
950 _elm_access_callback_set(_elm_access_object_get(obj), type, func, data);
954 elm_access_activate_cb_set(Evas_Object *obj,
955 Elm_Access_Activate_Cb func, void *data)
959 ac = _elm_access_object_get(obj);
963 ac->activate_data = data;
967 elm_access_say(const char *text)
971 _elm_access_say(text);
975 elm_access_highlight_set(Evas_Object* obj)
977 _access_obj_over_timeout_cb(obj);
981 elm_access_external_info_set(Evas_Object *obj, const char *text)
984 (_elm_access_object_get(obj), ELM_ACCESS_CONTEXT_INFO, text);
988 elm_access_external_info_get(const Evas_Object *obj)
992 ac = _elm_access_object_get(obj);
993 return _elm_access_text_get(ac, ELM_ACCESS_CONTEXT_INFO, obj);