elm_external: shutdown elm after del callback

This fixes a crash in edje_inspector as:
- delete callback is called on the object
 --> this unloaded elm
- destructor is called on the object
 --> this did some elm stuff, in particular read the config
     from _elm_config (now NULL).

Instead, shutdown elm after del, during free.

Also reset hash pointer to NULL after free.
This commit is contained in:
Jean-Philippe Andre 2015-07-29 22:13:07 +09:00
parent 29bb2e1d60
commit e7bf07bd5d
2 changed files with 2 additions and 13 deletions

View File

@ -31,15 +31,6 @@ external_elm_shutdown(void)
elm_shutdown();
}
static void
_external_obj_del(void *data EINA_UNUSED, Evas *evas EINA_UNUSED,
Evas_Object *obj, void *event_info EINA_UNUSED)
{
evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL,
_external_obj_del);
external_elm_shutdown();
}
void
external_signal(void *data EINA_UNUSED, Evas_Object *obj, const char *sig,
const char *source)
@ -106,6 +97,7 @@ _external_signal_proxy_free_cb(void *data, Evas *e EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Elm_External_Signals_Proxy_Context *ctxt = data;
external_elm_shutdown();
free(ctxt);
}
@ -201,8 +193,6 @@ external_signals_proxy(Evas_Object *obj, Evas_Object *edje, const char *part_nam
evas_object_smart_callback_add
(obj, d->name, _external_signal_proxy_cb, ctxt);
}
evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_external_obj_del, NULL);
}
void

View File

@ -3574,6 +3574,5 @@ _elm_config_shutdown(void)
_desc_shutdown();
if (_elm_key_bindings)
eina_hash_free(_elm_key_bindings);
ELM_SAFE_FREE(_elm_key_bindings, eina_hash_free);
}