forked from enlightenment/efl
[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:
parent
0483d05865
commit
f81147a18e
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue