forked from enlightenment/efl
edje: Factor out signal extra data setup code
Reviewers: zmike, cedric Reviewed By: zmike Tags: #efl Differential Revision: https://phab.enlightenment.org/D6111
This commit is contained in:
parent
03c20cc758
commit
d21ff733df
|
@ -426,14 +426,7 @@ _edje_message_free(Edje_Message *em)
|
|||
emsg = (Edje_Message_Signal *)em->msg;
|
||||
if (emsg->sig) eina_stringshare_del(emsg->sig);
|
||||
if (emsg->src) eina_stringshare_del(emsg->src);
|
||||
if (emsg->data && (--(emsg->data->ref) == 0))
|
||||
{
|
||||
if (emsg->data->free_func)
|
||||
{
|
||||
emsg->data->free_func(emsg->data->data);
|
||||
}
|
||||
free(emsg->data);
|
||||
}
|
||||
_edje_signal_data_free(emsg->data);
|
||||
free(emsg);
|
||||
}
|
||||
break;
|
||||
|
@ -506,7 +499,7 @@ _edje_message_propagate_send(Edje *ed, Edje_Queue queue, Edje_Message_Type type,
|
|||
if (emsg2->data)
|
||||
{
|
||||
emsg3->data = emsg2->data;
|
||||
emsg3->data->ref++;
|
||||
_edje_signal_data_ref(emsg3->data);
|
||||
}
|
||||
msg = (unsigned char *)emsg3;
|
||||
}
|
||||
|
|
|
@ -2531,6 +2531,9 @@ void _edje_emit_handle(Edje *ed, const char *sig, const char *src, Edje_Message_
|
|||
void _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp);
|
||||
const char * _edje_object_part_state_get(Edje *ed, const char *part, double *val_ret);
|
||||
|
||||
void _edje_signal_data_free(Edje_Message_Signal_Data *mdata);
|
||||
void _edje_signal_data_ref(Edje_Message_Signal_Data *mdata);
|
||||
|
||||
void _edje_focused_part_set(Edje *ed, const char *seat_name, Edje_Real_Part *rp);
|
||||
Edje_Real_Part *_edje_focused_part_get(Edje *ed, const char *seat_name);
|
||||
void _edje_part_focus_set(Edje *ed, const char *seat_name, Edje_Real_Part *rp);
|
||||
|
|
|
@ -128,6 +128,42 @@ _edje_emit_child(Edje *ed, Edje_Real_Part *rp, const char *part, const char *sig
|
|||
return ed->collection->broadcast_signal;
|
||||
}
|
||||
|
||||
static Edje_Message_Signal_Data *
|
||||
_edje_signal_data_setup(void *data, Ecore_Cb free_func)
|
||||
{
|
||||
Edje_Message_Signal_Data *out = NULL;
|
||||
|
||||
if (data)
|
||||
{
|
||||
out = calloc(1, sizeof(*out));
|
||||
if (!out) return NULL;
|
||||
|
||||
out->ref = 1;
|
||||
out->data = data;
|
||||
out->free_func = free_func;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
void
|
||||
_edje_signal_data_free(Edje_Message_Signal_Data *mdata)
|
||||
{
|
||||
if (!mdata) return;
|
||||
if (--(mdata->ref)) return;
|
||||
|
||||
if (mdata->free_func)
|
||||
{
|
||||
mdata->free_func(mdata->data);
|
||||
}
|
||||
free(mdata);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_signal_data_ref(Edje_Message_Signal_Data *mdata)
|
||||
{
|
||||
if (mdata) mdata->ref++;
|
||||
}
|
||||
|
||||
static void
|
||||
_edje_emit_send(Edje *ed, Eina_Bool broadcast, const char *sig, const char *src, void *data, Ecore_Cb free_func)
|
||||
{
|
||||
|
@ -135,17 +171,7 @@ _edje_emit_send(Edje *ed, Eina_Bool broadcast, const char *sig, const char *src,
|
|||
|
||||
emsg.sig = sig;
|
||||
emsg.src = src;
|
||||
if (data)
|
||||
{
|
||||
emsg.data = calloc(1, sizeof(*(emsg.data)));
|
||||
emsg.data->ref = 1;
|
||||
emsg.data->data = data;
|
||||
emsg.data->free_func = free_func;
|
||||
}
|
||||
else
|
||||
{
|
||||
emsg.data = NULL;
|
||||
}
|
||||
emsg.data = _edje_signal_data_setup(data, free_func);
|
||||
/* new sends code */
|
||||
if (broadcast)
|
||||
edje_object_message_send(ed->obj, EDJE_MESSAGE_SIGNAL, 0, &emsg);
|
||||
|
@ -163,14 +189,7 @@ _edje_emit_send(Edje *ed, Eina_Bool broadcast, const char *sig, const char *src,
|
|||
_edje_util_message_send(ed2, EDJE_QUEUE_SCRIPT, EDJE_MESSAGE_SIGNAL, 0, &emsg);
|
||||
}
|
||||
*/
|
||||
if (emsg.data && (--(emsg.data->ref) == 0))
|
||||
{
|
||||
if (emsg.data->free_func)
|
||||
{
|
||||
emsg.data->free_func(emsg.data->data);
|
||||
}
|
||||
free(emsg.data);
|
||||
}
|
||||
_edje_signal_data_free(emsg.data);
|
||||
}
|
||||
|
||||
/*============================================================================*
|
||||
|
|
Loading…
Reference in New Issue