forked from enlightenment/efl
edje: implement invalidate method and unset device callbacks here
prevent crashing in dangling callbacks ref d26124a6d818f62d892e178d92098f5159a8c9e0 Signed-off-by: Mike Blumenkrantz <zmike@osg.samsung.com>
This commit is contained in:
parent
cd8952cc6c
commit
db92072338
|
@ -1850,6 +1850,22 @@ _edje_object_collect(Edje *ed)
|
|||
return collect;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_file_callbacks_del(Edje *ed, Evas *e)
|
||||
{
|
||||
Evas *tev = e;
|
||||
|
||||
if (!tev) tev = evas_object_evas_get(ed->obj);
|
||||
efl_event_callback_del(tev, EFL_EVENT_DEL, _edje_device_canvas_del, ed);
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_ADDED,
|
||||
_edje_device_added_cb, ed);
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_REMOVED,
|
||||
_edje_device_removed_cb, ed);
|
||||
if (ed->collection && ed->collection->use_custom_seat_names)
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_CHANGED,
|
||||
_edje_device_changed_cb, ed);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_file_del(Edje *ed)
|
||||
{
|
||||
|
@ -1863,15 +1879,7 @@ _edje_file_del(Edje *ed)
|
|||
|
||||
if (tev)
|
||||
{
|
||||
efl_event_callback_del(tev, EFL_EVENT_DEL, _edje_device_canvas_del, ed);
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_ADDED,
|
||||
_edje_device_added_cb, ed);
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_REMOVED,
|
||||
_edje_device_removed_cb, ed);
|
||||
if (ed->collection && ed->collection->use_custom_seat_names)
|
||||
efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_CHANGED,
|
||||
_edje_device_changed_cb, ed);
|
||||
|
||||
_edje_file_callbacks_del(ed, tev);
|
||||
evas_event_freeze(tev);
|
||||
}
|
||||
|
||||
|
|
|
@ -2497,6 +2497,7 @@ EAPI void _edje_edd_shutdown(void);
|
|||
|
||||
int _edje_object_file_set_internal(Evas_Object *obj, const Eina_File *file, const char *group, const char *parent, Eina_List *group_path, Eina_Array *nested);
|
||||
|
||||
void _edje_file_callbacks_del(Edje *ed, Evas *e);
|
||||
void _edje_file_del(Edje *ed);
|
||||
void _edje_file_free(Edje_File *edf);
|
||||
void _edje_file_cache_shutdown(void);
|
||||
|
|
|
@ -47,6 +47,12 @@ _efl_canvas_layout_efl_object_constructor(Eo *obj, Edje *ed)
|
|||
return obj;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_layout_efl_object_invalidate(Eo *obj EINA_UNUSED, Edje *ed)
|
||||
{
|
||||
_edje_file_callbacks_del(ed, NULL);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_layout_efl_object_debug_name_override(Eo *obj, Edje *ed, Eina_Strbuf *sb)
|
||||
{
|
||||
|
|
|
@ -84,6 +84,7 @@ class Efl.Canvas.Layout (Efl.Canvas.Group, Efl.File, Efl.Container, Efl.Part,
|
|||
Efl.Gfx.position { set; }
|
||||
Efl.Gfx.size { set; }
|
||||
Efl.Object.constructor;
|
||||
Efl.Object.invalidate;
|
||||
Efl.Object.debug_name_override;
|
||||
Efl.Canvas.Object.no_render { set; }
|
||||
Efl.Canvas.Object.paragraph_direction { set; }
|
||||
|
|
Loading…
Reference in New Issue