forked from enlightenment/efl
[access] delete access object in job when its hover object is deleted
This commit is contained in:
parent
cf8eed415a
commit
ee57d26ada
|
@ -1589,3 +1589,7 @@
|
||||||
2013-09-04 Ryuan Choi (ryuan)
|
2013-09-04 Ryuan Choi (ryuan)
|
||||||
|
|
||||||
* elm_config : profile may be broken when clicked reset button in profiles tab
|
* elm_config : profile may be broken when clicked reset button in profiles tab
|
||||||
|
|
||||||
|
2013-09-07 Shinwoo Kim
|
||||||
|
|
||||||
|
* elm_access : delete access object in job when its hover object is deleted
|
||||||
|
|
|
@ -292,7 +292,7 @@ _access_obj_over_timeout_cb(void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
_access_hover_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Elm_Access_Info *ac;
|
Elm_Access_Info *ac;
|
||||||
if (!mouse_event_enable) return;
|
if (!mouse_event_enable) return;
|
||||||
|
@ -307,7 +307,7 @@ _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
_access_hover_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Elm_Access_Info *ac;
|
Elm_Access_Info *ac;
|
||||||
if (!mouse_event_enable) return;
|
if (!mouse_event_enable) return;
|
||||||
|
@ -320,13 +320,6 @@ _access_obj_mouse_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
|
||||||
ELM_SAFE_FREE(ac->delay_timer, ecore_timer_del);
|
ELM_SAFE_FREE(ac->delay_timer, ecore_timer_del);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
|
||||||
{
|
|
||||||
_elm_access_object_unregister(data, obj);
|
|
||||||
_access_object_unregister(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_access_read_done(void *data __UNUSED__)
|
_access_read_done(void *data __UNUSED__)
|
||||||
{
|
{
|
||||||
|
@ -940,17 +933,7 @@ _access_object_unregister(Evas_Object *obj)
|
||||||
|
|
||||||
if (ao)
|
if (ao)
|
||||||
{
|
{
|
||||||
evas_object_data_del(obj, "_part_access_obj");
|
/* delete callbacks and unregister access object in _access_obj_del_cb*/
|
||||||
|
|
||||||
/* delete callbacks */
|
|
||||||
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE,
|
|
||||||
_content_resize, ao);
|
|
||||||
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE,
|
|
||||||
_content_move, ao);
|
|
||||||
|
|
||||||
/* unregister access object */
|
|
||||||
_elm_access_object_unregister(ao, obj);
|
|
||||||
|
|
||||||
evas_object_del(ao);
|
evas_object_del(ao);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1019,17 +1002,86 @@ _elm_access_object_hilight_disable(Evas *e)
|
||||||
elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
|
elm_widget_parent_highlight_set(ptarget, EINA_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_access_obj_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
|
||||||
|
Ecore_Job *ao_del_job = NULL;
|
||||||
|
|
||||||
|
evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, _access_obj_del_cb);
|
||||||
|
|
||||||
|
if (data) /* hover object */
|
||||||
|
{
|
||||||
|
evas_object_event_callback_del_full(data, EVAS_CALLBACK_RESIZE,
|
||||||
|
_content_resize, obj);
|
||||||
|
evas_object_event_callback_del_full(data, EVAS_CALLBACK_MOVE,
|
||||||
|
_content_move, obj);
|
||||||
|
|
||||||
|
_elm_access_object_unregister(obj, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
ao_del_job = evas_object_data_get(obj, "_access_obj_del_job");
|
||||||
|
|
||||||
|
if (ao_del_job)
|
||||||
|
{
|
||||||
|
ecore_job_del(ao_del_job);
|
||||||
|
evas_object_data_del(obj, "_access_obj_del_job");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_access_obj_del_job(void *data)
|
||||||
|
{
|
||||||
|
if (!data) return;
|
||||||
|
|
||||||
|
evas_object_data_del(data, "_access_obj_del_job");
|
||||||
|
|
||||||
|
evas_object_event_callback_del(data, EVAS_CALLBACK_DEL, _access_obj_del_cb);
|
||||||
|
evas_object_del(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_access_hover_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Ecore_Job *ao_del_job = NULL;
|
||||||
|
|
||||||
|
/* data - access object - could be NULL */
|
||||||
|
if (!data) return;
|
||||||
|
|
||||||
|
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE,
|
||||||
|
_content_resize, data);
|
||||||
|
evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE,
|
||||||
|
_content_move, data);
|
||||||
|
|
||||||
|
_elm_access_object_unregister(data, obj);
|
||||||
|
|
||||||
|
/* delete access object in job */
|
||||||
|
ao_del_job = evas_object_data_get(data, "_access_obj_del_job");
|
||||||
|
if (ao_del_job)
|
||||||
|
{
|
||||||
|
ecore_job_del(ao_del_job);
|
||||||
|
evas_object_data_del(data, "_access_obj_del_job");
|
||||||
|
}
|
||||||
|
|
||||||
|
ao_del_job = ecore_job_add(_access_obj_del_job, data);
|
||||||
|
evas_object_data_set(data, "_access_obj_del_job", ao_del_job);
|
||||||
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
_elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
|
_elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
|
||||||
{
|
{
|
||||||
Elm_Access_Info *ac;
|
Elm_Access_Info *ac;
|
||||||
|
|
||||||
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_IN,
|
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_IN,
|
||||||
_access_obj_mouse_in_cb, obj);
|
_access_hover_mouse_in_cb, obj);
|
||||||
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
|
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
|
||||||
_access_obj_mouse_out_cb, obj);
|
_access_hover_mouse_out_cb, obj);
|
||||||
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_DEL,
|
evas_object_event_callback_add(hoverobj, EVAS_CALLBACK_DEL,
|
||||||
_access_obj_del_cb, obj);
|
_access_hover_del_cb, obj);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
|
||||||
|
_access_obj_del_cb, hoverobj);
|
||||||
|
|
||||||
ac = calloc(1, sizeof(Elm_Access_Info));
|
ac = calloc(1, sizeof(Elm_Access_Info));
|
||||||
evas_object_data_set(obj, "_elm_access", ac);
|
evas_object_data_set(obj, "_elm_access", ac);
|
||||||
|
|
||||||
|
@ -1040,18 +1092,29 @@ EAPI void
|
||||||
_elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
|
_elm_access_object_unregister(Evas_Object *obj, Evas_Object *hoverobj)
|
||||||
{
|
{
|
||||||
Elm_Access_Info *ac;
|
Elm_Access_Info *ac;
|
||||||
|
Evas_Object *ao;
|
||||||
|
|
||||||
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
|
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_IN,
|
||||||
_access_obj_mouse_in_cb, obj);
|
_access_hover_mouse_in_cb, obj);
|
||||||
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
|
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_MOUSE_OUT,
|
||||||
_access_obj_mouse_out_cb, obj);
|
_access_hover_mouse_out_cb, obj);
|
||||||
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
|
evas_object_event_callback_del_full(hoverobj, EVAS_CALLBACK_DEL,
|
||||||
_access_obj_del_cb, obj);
|
_access_hover_del_cb, obj);
|
||||||
|
|
||||||
|
/* _access_obj_del_cb and _access_hover_del_cb calls this function,
|
||||||
|
both do not need _part_access_obj data, so delete the data here. */
|
||||||
|
ao = evas_object_data_get(hoverobj, "_part_access_obj");
|
||||||
|
if (ao) evas_object_data_del(hoverobj, "_part_access_obj");
|
||||||
|
|
||||||
ac = evas_object_data_get(obj, "_elm_access");
|
ac = evas_object_data_get(obj, "_elm_access");
|
||||||
evas_object_data_del(obj, "_elm_access");
|
evas_object_data_del(obj, "_elm_access");
|
||||||
if (ac)
|
if (ac)
|
||||||
{
|
{
|
||||||
|
/* widget could delete VIEW(it) only and register item again,
|
||||||
|
in this case _elm_access_widget_item_register could try to delete
|
||||||
|
access object again in _elm_access_widget_item_unregister */
|
||||||
|
if (ac->widget_item) ac->widget_item->access_obj = NULL;
|
||||||
|
|
||||||
_elm_access_clear(ac);
|
_elm_access_clear(ac);
|
||||||
free(ac);
|
free(ac);
|
||||||
}
|
}
|
||||||
|
@ -1103,22 +1166,17 @@ _elm_access_widget_item_register(Elm_Widget_Item *item)
|
||||||
EAPI void
|
EAPI void
|
||||||
_elm_access_widget_item_unregister(Elm_Widget_Item *item)
|
_elm_access_widget_item_unregister(Elm_Widget_Item *item)
|
||||||
{
|
{
|
||||||
Evas_Object *ho;
|
Evas_Object *ao;
|
||||||
|
|
||||||
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
|
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
|
||||||
|
|
||||||
if (!item->access_obj) return;
|
if (!item->access_obj) return;
|
||||||
|
|
||||||
ho = item->view;
|
/* delete callbacks and unregister access object in _access_obj_del_cb*/
|
||||||
evas_object_event_callback_del_full(ho, EVAS_CALLBACK_RESIZE,
|
ao = item->access_obj;
|
||||||
_content_resize, item->access_obj);
|
|
||||||
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;
|
item->access_obj = NULL;
|
||||||
|
|
||||||
|
evas_object_del(ao);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
|
|
Loading…
Reference in New Issue