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 Evas_Object * _elm_access_add(Evas_Object *parent);
13 _elm_access_smart_add(Evas_Object *obj)
15 EVAS_SMART_DATA_ALLOC(obj, Elm_Widget_Smart_Data);
16 ELM_WIDGET_CLASS(_elm_access_parent_sc)->base.add(obj);
18 elm_widget_can_focus_set(obj, EINA_TRUE);
22 _elm_access_smart_on_focus(Evas_Object *obj)
24 evas_object_focus_set(obj, elm_widget_focus_get(obj));
30 _elm_access_smart_activate(Evas_Object *obj, Elm_Activate act)
32 if (act != ELM_ACTIVATE_DEFAULT) return EINA_FALSE;
34 Elm_Access_Info *ac = evas_object_data_get(obj, "_elm_access");
35 if (!ac) return EINA_FALSE;
38 ac->activate(ac->activate_data, ac->part_object,
39 (Elm_Object_Item *)ac->widget_item);
45 _elm_access_smart_set_user(Elm_Widget_Smart_Class *sc)
47 sc->base.add = _elm_access_smart_add;
49 /* not a 'focus chain manager' */
50 sc->focus_next = NULL;
51 sc->focus_direction = NULL;
52 sc->on_focus = _elm_access_smart_on_focus;
53 sc->activate = _elm_access_smart_activate;
58 typedef struct _Mod_Api Mod_Api;
62 void (*out_read) (const char *txt);
63 void (*out_read_done) (void);
64 void (*out_cancel) (void);
65 void (*out_done_callback_set) (void (*func) (void *data), const void *data);
68 static int initted = 0;
69 static Mod_Api *mapi = NULL;
76 if (initted > 1) return;
77 if (!(m = _elm_module_find_as("access/api"))) return;
78 m->api = malloc(sizeof(Mod_Api));
81 ((Mod_Api *)(m->api) )->out_read = // called to read out some text
82 _elm_module_symbol_get(m, "out_read");
83 ((Mod_Api *)(m->api) )->out_read_done = // called to set a done marker so when it is reached the done callback is called
84 _elm_module_symbol_get(m, "out_read_done");
85 ((Mod_Api *)(m->api) )->out_cancel = // called to read out some text
86 _elm_module_symbol_get(m, "out_cancel");
87 ((Mod_Api *)(m->api) )->out_done_callback_set = // called when last read done
88 _elm_module_symbol_get(m, "out_done_callback_set");
92 static Elm_Access_Item *
93 _access_add_set(Elm_Access_Info *ac, int type)
99 EINA_LIST_FOREACH(ac->items, l, ai)
101 if (ai->type == type)
105 if (ai->data) eina_stringshare_del(ai->data);
112 ai = calloc(1, sizeof(Elm_Access_Item));
114 ac->items = eina_list_prepend(ac->items, ai);
119 _access_obj_over_timeout_cb(void *data)
121 Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access");
122 if (!ac) return EINA_FALSE;
123 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
125 if (ac->on_highlight) ac->on_highlight(ac->on_highlight_data);
126 _elm_access_object_hilight(data);
127 _elm_access_read(ac, ELM_ACCESS_CANCEL, data);
128 _elm_access_read(ac, ELM_ACCESS_INFO, data);
129 _elm_access_read(ac, ELM_ACCESS_TYPE, data);
130 _elm_access_read(ac, ELM_ACCESS_STATE, data);
131 _elm_access_read(ac, ELM_ACCESS_CONTEXT_INFO, data);
132 _elm_access_read(ac, ELM_ACCESS_DONE, data);
134 ac->delay_timer = NULL;
139 _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
141 Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access");
146 ecore_timer_del(ac->delay_timer);
147 ac->delay_timer = NULL;
149 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
150 ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data);
154 _access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
156 Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access");
158 _elm_access_object_unhilight(data);
161 ecore_timer_del(ac->delay_timer);
162 ac->delay_timer = NULL;
167 _access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
169 _elm_access_object_unregister(data, obj);
171 // _elm_access_edje_object_part_object_register(); set below object data
172 evas_object_data_del(obj, "_part_access_obj");
176 _access_read_done(void *data __UNUSED__)
178 printf("read done\n");
179 // FIXME: produce event here
183 _access_2nd_click_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
187 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
188 _access_2nd_click_del_cb, NULL);
189 t = evas_object_data_get(obj, "_elm_2nd_timeout");
193 evas_object_data_del(obj, "_elm_2nd_timeout");
198 _access_2nd_click_timeout_cb(void *data)
200 evas_object_event_callback_del_full(data, EVAS_CALLBACK_DEL,
201 _access_2nd_click_del_cb, NULL);
202 evas_object_data_del(data, "_elm_2nd_timeout");
207 _access_obj_hilight_del_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
209 _elm_access_object_hilight_disable(e);
213 _access_obj_hilight_hide_cb(void *data __UNUSED__, Evas *e, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
215 _elm_access_object_hilight_disable(e);
219 _access_obj_hilight_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
224 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
226 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
227 evas_object_move(o, x, y);
231 _access_obj_hilight_resize_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
236 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
238 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
239 evas_object_resize(o, w, h);
243 _access_highlight_object_get(Evas_Object *obj)
247 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
250 ho = evas_object_data_get(o, "_elm_access_target");
255 //-------------------------------------------------------------------------//
257 _elm_access_highlight_set(Evas_Object* obj)
259 _access_obj_over_timeout_cb(obj);
263 _elm_access_clear(Elm_Access_Info *ac)
270 ecore_timer_del(ac->delay_timer);
271 ac->delay_timer = NULL;
273 EINA_LIST_FREE(ac->items, ai)
277 if (ai->data) eina_stringshare_del(ai->data);
284 _elm_access_text_set(Elm_Access_Info *ac, int type, const char *text)
286 Elm_Access_Item *ai = _access_add_set(ac, type);
288 ai->data = eina_stringshare_add(text);
292 _elm_access_callback_set(Elm_Access_Info *ac, int type, Elm_Access_Content_Cb func, const void *data)
294 Elm_Access_Item *ai = _access_add_set(ac, type);
301 _elm_access_on_highlight_hook_set(Elm_Access_Info *ac,
302 Elm_Access_On_Highlight_Cb func,
306 ac->on_highlight = func;
307 ac->on_highlight_data = data;
311 _elm_access_activate_callback_set(Elm_Access_Info *ac,
312 Elm_Access_Activate_Cb func,
317 ac->activate_data = data;
321 _elm_access_highlight_object_activate(Evas_Object *obj, Elm_Activate act)
323 Evas_Object *highlight;
326 highlight = _access_highlight_object_get(obj);
327 if (!highlight) return;
329 if (elm_widget_is(highlight))
331 elm_widget_activate(highlight, act);
335 ac = evas_object_data_get(highlight, "_elm_access");
339 ac->activate(ac->activate_data, highlight,
340 (Elm_Object_Item *)ac->widget_item);
344 _elm_access_highlight_cycle(Evas_Object *obj, Elm_Focus_Direction dir)
346 Evas_Object *highlight, *focused;
348 highlight = _access_highlight_object_get(obj);
349 focused = elm_widget_focused_object_get(obj);
351 if (highlight && (highlight != focused))
352 elm_object_focus_set(highlight, EINA_TRUE);
354 /* use focus cycle to read next, previous object */
355 elm_widget_focus_cycle(obj, dir);
359 _elm_access_text_get(const Elm_Access_Info *ac, int type, Evas_Object *obj)
364 if (!ac) return NULL;
365 EINA_LIST_FOREACH(ac->items, l, ai)
367 if (ai->type == type)
369 if (ai->func) return ai->func((void *)(ai->data), obj);
370 else if (ai->data) return strdup(ai->data);
378 _elm_access_read(Elm_Access_Info *ac, int type, Evas_Object *obj)
380 char *txt = _elm_access_text_get(ac, type, obj);
385 if (mapi->out_done_callback_set)
386 mapi->out_done_callback_set(_access_read_done, NULL);
387 if (type == ELM_ACCESS_DONE)
389 if (mapi->out_read_done) mapi->out_read_done();
391 else if (type == ELM_ACCESS_CANCEL)
393 if (mapi->out_cancel) mapi->out_cancel();
399 if (mapi->out_read) mapi->out_read(txt);
400 if (mapi->out_read) mapi->out_read(".\n");
408 _elm_access_say(const char *txt)
413 if (mapi->out_done_callback_set)
414 mapi->out_done_callback_set(_access_read_done, NULL);
415 if (mapi->out_cancel) mapi->out_cancel();
418 if (mapi->out_read) mapi->out_read(txt);
419 if (mapi->out_read) mapi->out_read(".\n");
421 if (mapi->out_read_done) mapi->out_read_done();
425 EAPI Elm_Access_Info *
426 _elm_access_object_get(const Evas_Object *obj)
428 return evas_object_data_get(obj, "_elm_access");
432 _elm_access_object_hilight(Evas_Object *obj)
434 Evas_Object *o, *parent_obj;
435 Evas_Coord x, y, w, h;
437 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
440 o = edje_object_add(evas_object_evas_get(obj));
441 evas_object_name_set(o, "_elm_access_disp");
442 evas_object_layer_set(o, ELM_OBJECT_LAYER_TOOLTIP);
446 Evas_Object *ptarget = evas_object_data_get(o, "_elm_access_target");
449 evas_object_data_del(o, "_elm_access_target");
450 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
451 _access_obj_hilight_del_cb, NULL);
452 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
453 _access_obj_hilight_hide_cb, NULL);
454 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
455 _access_obj_hilight_move_cb, NULL);
456 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
457 _access_obj_hilight_resize_cb, NULL);
460 evas_object_data_set(o, "_elm_access_target", obj);
463 if (!elm_widget_is(obj))
464 parent_obj = evas_object_data_get(obj, "_elm_access_parent");
466 elm_widget_theme_object_set(parent_obj, o, "access", "base", "default");
468 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
469 _access_obj_hilight_del_cb, NULL);
470 evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE,
471 _access_obj_hilight_hide_cb, NULL);
472 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE,
473 _access_obj_hilight_move_cb, NULL);
474 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE,
475 _access_obj_hilight_resize_cb, NULL);
476 evas_object_raise(o);
477 evas_object_geometry_get(obj, &x, &y, &w, &h);
478 evas_object_move(o, x, y);
479 evas_object_resize(o, w, h);
484 _elm_access_object_unhilight(Evas_Object *obj)
486 Evas_Object *o, *ptarget;
488 o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
490 ptarget = evas_object_data_get(o, "_elm_access_target");
493 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
494 _access_obj_hilight_del_cb, NULL);
495 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
496 _access_obj_hilight_hide_cb, NULL);
497 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
498 _access_obj_hilight_move_cb, NULL);
499 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
500 _access_obj_hilight_resize_cb, NULL);
506 _content_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj,
507 void *event_info __UNUSED__)
509 Evas_Object *accessobj;
513 if (!accessobj) return;
515 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
516 evas_object_resize(accessobj, w, h);
520 _content_move(void *data, Evas *e __UNUSED__, Evas_Object *obj,
521 void *event_info __UNUSED__)
523 Evas_Object *accessobj;
527 if (!accessobj) return;
529 evas_object_geometry_get(obj, &x, &y, NULL, NULL);
530 evas_object_move(accessobj, x, y);
534 _part_access_info_cb(void *data, Evas_Object *obj)
536 Evas_Object *eobj = data;
537 if (!eobj) return NULL;
539 const char *part = evas_object_data_get(obj, "_elm_access_part");
540 const char *txt = edje_object_part_text_get(eobj, part);
541 if (txt) return strdup(txt);
546 _access_obj_del(void *data __UNUSED__, Evas *e __UNUSED__,
547 Evas_Object *obj, void *event_info __UNUSED__)
549 char *part = evas_object_data_get(obj, "_elm_access_part");
550 evas_object_data_del(obj, "_elm_access_part");
551 if (part) free(part);
555 _elm_access_edje_object_part_object_register(Evas_Object* obj,
556 const Evas_Object *eobj,
560 Evas_Object *po = (Evas_Object *)edje_object_part_object_get(eobj, part);
561 Evas_Coord x, y, w, h;
564 if (!obj || !po) return NULL;
566 // check previous access object
567 ao = evas_object_data_get(po, "_part_access_obj");
569 _elm_access_edje_object_part_object_unregister(obj, eobj, part);
571 // create access object
572 ao = _elm_access_add(obj);
573 if (!ao) return NULL;
575 evas_object_event_callback_add(po, EVAS_CALLBACK_RESIZE,
576 _content_resize, ao);
577 evas_object_event_callback_add(po, EVAS_CALLBACK_MOVE,
580 evas_object_geometry_get(po, &x, &y, &w, &h);
581 evas_object_move(ao, x, y);
582 evas_object_resize(ao, w, h);
583 evas_object_show(ao);
585 // register access object
586 _elm_access_object_register(ao, po);
587 _elm_access_text_set(_elm_access_object_get(ao),
588 ELM_ACCESS_TYPE, evas_object_type_get(po));
589 evas_object_data_set(ao, "_elm_access_part", strdup(part));
590 evas_object_event_callback_add(ao, EVAS_CALLBACK_DEL,
591 _access_obj_del, NULL);
592 _elm_access_callback_set(_elm_access_object_get(ao),
594 _part_access_info_cb, eobj);
597 evas_object_data_set(po, "_part_access_obj", ao);
599 /* set owner part object */
600 ac = evas_object_data_get(ao, "_elm_access");
601 ac->part_object = po;
607 _elm_access_edje_object_part_object_unregister(Evas_Object* obj,
608 const Evas_Object *eobj,
612 Evas_Object *po = (Evas_Object *)edje_object_part_object_get(eobj, part);
614 if (!obj || !po) return;
616 ao = evas_object_data_get(po, "_part_access_obj");
619 evas_object_data_del(po, "_part_access_obj");
622 evas_object_event_callback_del_full(po, EVAS_CALLBACK_RESIZE,
623 _content_resize, ao);
624 evas_object_event_callback_del_full(po, EVAS_CALLBACK_MOVE,
627 evas_object_event_callback_del_full(po, EVAS_CALLBACK_MOUSE_IN,
628 _access_obj_mouse_in_cb, ao);
629 evas_object_event_callback_del_full(po, EVAS_CALLBACK_MOUSE_OUT,
630 _access_obj_mouse_out_cb, ao);
631 evas_object_event_callback_del_full(po, EVAS_CALLBACK_DEL,
632 _access_obj_del_cb, ao);
637 _elm_access_object_hilight_disable(Evas *e)
639 Evas_Object *o, *ptarget;
641 o = evas_object_name_find(e, "_elm_access_disp");
643 ptarget = evas_object_data_get(o, "_elm_access_target");
646 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_DEL,
647 _access_obj_hilight_del_cb, NULL);
648 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_HIDE,
649 _access_obj_hilight_hide_cb, NULL);
650 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_MOVE,
651 _access_obj_hilight_move_cb, NULL);
652 evas_object_event_callback_del_full(ptarget, EVAS_CALLBACK_RESIZE,
653 _access_obj_hilight_resize_cb, NULL);
659 _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
663 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_IN,
664 _access_obj_mouse_in_cb, obj);
665 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
666 _access_obj_mouse_out_cb, obj);
667 evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_DEL,
668 _access_obj_del_cb, obj);
669 ac = calloc(1, sizeof(Elm_Access_Info));
670 evas_object_data_set(obj, "_elm_access", ac);
674 _elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
678 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
679 _access_obj_mouse_in_cb, obj);
680 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
681 _access_obj_mouse_out_cb, obj);
682 evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
683 _access_obj_del_cb, obj);
685 ac = evas_object_data_get(obj, "_elm_access");
686 evas_object_data_del(obj, "_elm_access");
689 _elm_access_clear(ac);
695 _elm_access_widget_item_register(Elm_Widget_Item *item)
697 Evas_Object *ao, *ho;
698 Evas_Coord x, y, w, h;
703 /* check previous access object */
704 if (item->access_obj)
705 _elm_access_widget_item_unregister(item);
707 // create access object
709 ao = _elm_access_add(item->widget);
712 evas_object_event_callback_add(ho, EVAS_CALLBACK_RESIZE,
713 _content_resize, ao);
714 evas_object_event_callback_add(ho, EVAS_CALLBACK_MOVE,
717 evas_object_geometry_get(ho, &x, &y, &w, &h);
718 evas_object_move(ao, x, y);
719 evas_object_resize(ao, w, h);
720 evas_object_show(ao);
722 // register access object
723 _elm_access_object_register(ao, ho);
725 item->access_obj = ao;
727 /* set owner widget item */
728 ac = evas_object_data_get(ao, "_elm_access");
729 ac->widget_item = item;
733 _elm_access_widget_item_unregister(Elm_Widget_Item *item)
737 if (!item || !item->access_obj) return;
740 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_RESIZE,
741 _content_resize, item->access_obj);
742 evas_object_event_callback_del_full(ho, EVAS_CALLBACK_MOVE,
743 _content_move, item->access_obj);
745 _elm_access_object_unregister(item->access_obj, ho);
747 evas_object_del(item->access_obj);
748 item->access_obj = NULL;
752 _elm_access_2nd_click_timeout(Evas_Object *obj)
756 t = evas_object_data_get(obj, "_elm_2nd_timeout");
760 evas_object_data_del(obj, "_elm_2nd_timeout");
761 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
762 _access_2nd_click_del_cb, NULL);
765 t = ecore_timer_add(0.3, _access_2nd_click_timeout_cb, obj);
766 evas_object_data_set(obj, "_elm_2nd_timeout", t);
767 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
768 _access_2nd_click_del_cb, NULL);
773 _elm_access_add(Evas_Object *parent)
777 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
779 obj = elm_widget_add(_elm_access_smart_class_new(), parent);
780 if (!obj) return NULL;
782 if (!elm_widget_sub_object_add(parent, obj))
783 ERR("could not add %p as sub object of %p", obj, parent);
789 elm_access_text_set(Evas_Object *obj, int type, const char *text)
791 _elm_access_text_set(_elm_access_object_get(obj), type, text);
795 elm_access_text_get(Evas_Object *obj, int type)
797 return _elm_access_text_get(_elm_access_object_get(obj), type, obj);
801 elm_access_object_register(Evas_Object *parent, Evas_Object *target)
805 if (!parent || !target) return;
807 evas_object_event_callback_add(target, EVAS_CALLBACK_MOUSE_IN,
808 _access_obj_mouse_in_cb, target);
809 evas_object_event_callback_add(target, EVAS_CALLBACK_MOUSE_OUT,
810 _access_obj_mouse_out_cb, target);
811 evas_object_event_callback_add(target, EVAS_CALLBACK_DEL,
812 _access_obj_del_cb, target);
813 ai = calloc(1, sizeof(Elm_Access_Info));
814 evas_object_data_set(target, "_elm_access", ai);
816 //TODO: evas_object_data_del(); parent should take care of children.
817 evas_object_data_set(target, "_elm_access_parent", parent);
821 elm_access_object_unregister(Evas_Object *obj)
825 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOUSE_IN,
826 _access_obj_mouse_in_cb, obj);
827 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOUSE_OUT,
828 _access_obj_mouse_out_cb, obj);
829 evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
830 _access_obj_del_cb, obj);
832 ac = evas_object_data_get(obj, "_elm_access");
833 evas_object_data_del(obj, "_elm_access");
836 _elm_access_clear(ac);
840 evas_object_data_del(obj, "_elm_access_parent");
844 elm_access_content_cb_set(Evas_Object *obj, int type,
845 Elm_Access_Content_Cb func, const void *data)
847 _elm_access_callback_set(_elm_access_object_get(obj), type, func, data);
851 elm_access_activate_cb_set(Evas_Object *obj,
852 Elm_Access_Activate_Cb func, void *data)
856 ac = _elm_access_object_get(obj);
860 ac->activate_data = data;
864 elm_access_external_info_set(Evas_Object *obj, const char *text)
867 (_elm_access_object_get(obj), ELM_ACCESS_CONTEXT_INFO, text);
871 elm_access_external_info_get(const Evas_Object *obj)
875 ac = _elm_access_object_get(obj);
876 return _elm_access_text_get(ac, ELM_ACCESS_CONTEXT_INFO, (Evas_Object *)obj);