edje: Add edje_emit_full_data

Summary:
This is an even fuller emit_full, that takes a pre-made signal data
struct.  The original edje_emit_full is now implemented as a call to it.
Depends on D6113

Reviewers: zmike, cedric

Reviewed By: zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6114
This commit is contained in:
Derek Foreman 2018-05-08 12:26:08 -05:00
parent e12498f4d4
commit 6d4f78d676
2 changed files with 15 additions and 3 deletions

View File

@ -2529,6 +2529,7 @@ void _edje_programs_patterns_init(Edje_Part_Collection *ed);
void _edje_emit(Edje *ed, const char *sig, const char *src);
void _edje_seat_emit(Edje *ed, Efl_Input_Device *dev, const char *sig, const char *src);
void _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void (*free_func)(void *));
void _edje_emit_full_data(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Data *mdata);
void _edje_emit_handle(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Data *data, Eina_Bool prop);
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);

View File

@ -195,7 +195,6 @@ _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);
}
*/
_edje_signal_data_free(emsg.data);
}
/*============================================================================*
@ -1271,12 +1270,23 @@ void
_edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void (*free_func)(void *))
{
Edje_Message_Signal_Data *mdata;
mdata = _edje_signal_data_setup(data, free_func, NULL, NULL);
_edje_emit_full_data(ed, sig, src, mdata);
_edje_signal_data_free(mdata);
}
void
_edje_emit_full_data(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Data *mdata)
{
const char *sep;
Eina_Bool broadcast;
if (!ed->collection) return;
if (ed->delete_me) return;
_edje_signal_data_ref(mdata);
sep = strchr(sig, EDJE_PART_PATH_SEPARATOR);
/* If we are not sending the signal to a part of the child, the
* signal if for ourself
@ -1295,15 +1305,16 @@ _edje_emit_full(Edje *ed, const char *sig, const char *src, void *data, void (*f
newsig = sep + 1;
if (_edje_emit_aliased(ed, part, newsig, src)) return;
if (_edje_emit_aliased(ed, part, newsig, src)) goto out;
broadcast = _edje_emit_child(ed, NULL, part, newsig, src);
}
else
broadcast = ed->collection->broadcast_signal;
mdata = _edje_signal_data_setup(data, free_func, NULL, NULL);
_edje_emit_send(ed, broadcast, sig, src, mdata);
out:
_edje_signal_data_free(mdata);
}
void