[access] enhance access feature

1. add _elm_access_object_unregister(); api.
  2. unregister access object properly when unregister widget item.
  3. modify improper access object check.
  4. [list] add smart_access(); lines to provide run time register, unregister.
  5. [genlist] unregister access object when genlist item is unrealized.



SVN revision: 79444
This commit is contained in:
Shinwoo Kim 2012-11-19 13:08:54 +00:00
parent 0483d05865
commit f81147a18e
4 changed files with 71 additions and 34 deletions

View File

@ -164,21 +164,7 @@ _access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
static void
_access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
Elm_Access_Info *ac;
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOUSE_IN,
_access_obj_mouse_in_cb, data);
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOUSE_OUT,
_access_obj_mouse_out_cb, data);
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
_access_obj_del_cb, data);
ac = evas_object_data_get(data, "_elm_access");
evas_object_data_del(data, "_elm_access");
if (ac)
{
_elm_access_clear(ac);
free(ac);
}
_elm_access_object_unregister(data, obj);
// _elm_access_edje_object_part_object_register(); set below object data
evas_object_data_del(obj, "_part_access_obj");
@ -640,6 +626,27 @@ _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
evas_object_data_set(obj, "_elm_access", ac);
}
EAPI void
_elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
{
Elm_Access_Info *ac;
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
_access_obj_mouse_in_cb, obj);
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
_access_obj_mouse_out_cb, obj);
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
_access_obj_del_cb, obj);
ac = evas_object_data_get(obj, "_elm_access");
evas_object_data_del(obj, "_elm_access");
if (ac)
{
_elm_access_clear(ac);
free(ac);
}
}
static Eina_Bool
_access_item_over_timeout_cb(void *data)
{
@ -727,6 +734,10 @@ _elm_access_widget_item_register(Elm_Widget_Item *item)
if (!item) return;
/* check previous access object */
if (item->access_obj)
_elm_access_widget_item_unregister(item);
// create access object
ho = item->view;
ao = _elm_access_add(item->widget);
@ -755,7 +766,7 @@ _elm_access_widget_item_unregister(Elm_Widget_Item *item)
{
Evas_Object *ho;
if (!item || item->access_obj) return;
if (!item || !item->access_obj) return;
ho = item->view;
evas_object_event_callback_del_full(ho, EVAS_CALLBACK_RESIZE,
@ -763,7 +774,10 @@ _elm_access_widget_item_unregister(Elm_Widget_Item *item)
evas_object_event_callback_del_full(ho, EVAS_CALLBACK_MOVE,
_content_move, item->access_obj);
_elm_access_object_unregister(item->access_obj, ho);
evas_object_del(item->access_obj);
item->access_obj = NULL;
}
EAPI void

View File

@ -4204,6 +4204,10 @@ _item_unrealize_cb(Elm_Gen_Item *it)
EINA_LIST_FREE (it->item->flip_content_objs, content)
evas_object_del(content);
/* access */
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
_elm_access_widget_item_unregister((Elm_Widget_Item *)it);
// unswallow VIEW(it) first then manipulate VIEW(it)
_decorate_item_unrealize(it);
if (GL_IT(it)->wsd->decorate_all_mode) _decorate_all_item_unrealize(it);
@ -4685,7 +4689,7 @@ _elm_genlist_smart_member_add(Evas_Object *obj,
}
static void
_access_obj_process(Elm_Genlist_Smart_Data * sd, Eina_Bool is_access)
_access_obj_process(Elm_Genlist_Smart_Data *sd, Eina_Bool is_access)
{
Item_Block *itb;
Eina_Bool done = EINA_FALSE;

View File

@ -1364,6 +1364,25 @@ _access_on_highlight_cb(void *data)
elm_list_item_bring_in(it);
}
static void
_access_widget_item_register(Elm_List_Item *it, Eina_Bool is_access)
{
Elm_Access_Info *ai;
if (!is_access) _elm_access_widget_item_unregister((Elm_Widget_Item *)it);
else
{
_elm_access_widget_item_register((Elm_Widget_Item *)it);
ai = _elm_access_object_get(it->base.access_obj);
_elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("List Item"));
_elm_access_callback_set(ai, ELM_ACCESS_INFO, _access_info_cb, it);
_elm_access_callback_set(ai, ELM_ACCESS_STATE, _access_state_cb, it);
_elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, it);
}
}
static Elm_List_Item *
_item_new(Evas_Object *obj,
const char *label,
@ -1386,23 +1405,9 @@ _item_new(Evas_Object *obj,
VIEW(it) = edje_object_add(evas_object_evas_get(obj));
// ACCESS
/* access */
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
{
_elm_access_widget_item_register((Elm_Widget_Item *)it);
_elm_access_text_set(_elm_access_object_get(it->base.access_obj),
ELM_ACCESS_TYPE, E_("List Item"));
_elm_access_callback_set(_elm_access_object_get(it->base.access_obj),
ELM_ACCESS_INFO,
_access_info_cb, it);
_elm_access_callback_set(_elm_access_object_get(it->base.access_obj),
ELM_ACCESS_STATE,
_access_state_cb, it);
_elm_access_on_highlight_hook_set(
_elm_access_object_get(it->base.access_obj), _access_on_highlight_cb,
it);
}
_access_widget_item_register(it, EINA_TRUE);
edje_object_mirrored_set(VIEW(it), elm_widget_mirrored_get(obj));
evas_object_event_callback_add
@ -1628,6 +1633,18 @@ _elm_list_smart_member_add(Evas_Object *obj,
evas_object_raise(sd->hit_rect);
}
static void
_elm_list_smart_access(Evas_Object *obj, Eina_Bool is_access)
{
Eina_List *elist = NULL;
Elm_List_Item *it;
ELM_LIST_DATA_GET(obj, sd);
EINA_LIST_FOREACH(sd->items, elist, it)
_access_widget_item_register(it, is_access);
}
static void
_elm_list_smart_set_user(Elm_List_Smart_Class *sc)
{
@ -1645,6 +1662,7 @@ _elm_list_smart_set_user(Elm_List_Smart_Class *sc)
ELM_WIDGET_CLASS(sc)->disable = _elm_list_smart_disable;
ELM_WIDGET_CLASS(sc)->event = _elm_list_smart_event;
ELM_WIDGET_CLASS(sc)->translate = _elm_list_smart_translate;
ELM_WIDGET_CLASS(sc)->access = _elm_list_smart_access;
ELM_LAYOUT_CLASS(sc)->sizing_eval = _elm_list_smart_sizing_eval;
}

View File

@ -598,8 +598,9 @@ EAPI void _elm_access_object_hilight(Evas_Object *obj);
EAPI void _elm_access_object_unhilight(Evas_Object *obj);
EAPI void _elm_access_object_hilight_disable(Evas *e);
EAPI void _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj);
EAPI void _elm_access_item_unregister(Elm_Widget_Item *item);
EAPI void _elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj);
EAPI void _elm_access_item_register(Elm_Widget_Item *item, Evas_Object *hoverobj);
EAPI void _elm_access_item_unregister(Elm_Widget_Item *item);
EAPI Eina_Bool _elm_access_2nd_click_timeout(Evas_Object *obj);
EAPI void _elm_access_highlight_set(Evas_Object* obj);
EAPI Evas_Object * _elm_access_edje_object_part_object_register(Evas_Object *obj, const Evas_Object *partobj, const char* part);