evas: switch to EFL_EVENT_INVALIDATE for event grabber sub-object deletion

Summary:
this requires the parent of the deleted object to be reachable, so use the
invalidate callback as this is the last point during which it's possible to
retrieve a parent object

ref T7030

Depends on D6320

Reviewers: bu5hm4n, Hermet, woohyun, devilhorns

Reviewed By: bu5hm4n

Subscribers: cedric, #committers

Tags: #efl

Maniphest Tasks: T7030

Differential Revision: https://phab.enlightenment.org/D6321
This commit is contained in:
Mike Blumenkrantz 2018-06-19 13:40:52 -04:00
parent 13b702816e
commit b7cb24c323
1 changed files with 3 additions and 3 deletions

View File

@ -189,7 +189,7 @@ _efl_canvas_object_event_grabber_child_restack(void *data, const Efl_Event *even
}
static void
_efl_canvas_object_event_grabber_child_del(void *data, const Efl_Event *event)
_efl_canvas_object_event_grabber_child_invalidate(void *data, const Efl_Event *event)
{
Efl_Object_Event_Grabber_Data *pd = data;
@ -244,7 +244,7 @@ _efl_canvas_event_grabber_efl_canvas_group_group_member_add(Eo *eo_obj, Efl_Obje
events->parent = eo_obj;
EINA_COW_WRITE_END(evas_object_events_cow, sub->events, events);
_child_insert(pd, sub);
efl_event_callback_add(eo_sub, EFL_EVENT_DEL, _efl_canvas_object_event_grabber_child_del, pd);
efl_event_callback_add(eo_sub, EFL_EVENT_INVALIDATE, _efl_canvas_object_event_grabber_child_invalidate, pd);
if (eo_sub != pd->rect)
efl_event_callback_add(eo_sub, EFL_GFX_ENTITY_EVENT_RESTACK, _efl_canvas_object_event_grabber_child_restack, pd);
}
@ -254,7 +254,7 @@ _efl_canvas_event_grabber_efl_canvas_group_group_member_del(Eo *eo_obj EINA_UNUS
{
Evas_Object_Protected_Data *obj = efl_data_scope_get(member, EFL_CANVAS_OBJECT_CLASS);
efl_event_callback_del(member, EFL_EVENT_DEL, _efl_canvas_object_event_grabber_child_del, pd);
efl_event_callback_del(member, EFL_EVENT_INVALIDATE, _efl_canvas_object_event_grabber_child_invalidate, pd);
efl_event_callback_del(member, EFL_GFX_ENTITY_EVENT_RESTACK, _efl_canvas_object_event_grabber_child_restack, pd);
pd->contained = eina_list_remove(pd->contained, obj);