diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2018-05-08 12:26:08 -0500 |
---|---|---|
committer | Derek Foreman <derekf@osg.samsung.com> | 2018-05-08 12:26:08 -0500 |
commit | 6d4f78d67644b2cff2c71df87d1549005f8d54e6 (patch) | |
tree | 6ea061dc1f60f4e84e86e26d4dc2a49e9acf57e1 | |
parent | e12498f4d4e5dfb63052ac81ea4bc39056b8baa0 (diff) | |
download | efl-6d4f78d67644b2cff2c71df87d1549005f8d54e6.tar.gz |
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
-rw-r--r-- | src/lib/edje/edje_private.h | 1 | ||||
-rw-r--r-- | src/lib/edje/edje_program.c | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 6ebfaee95f..aad19e84dc 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -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); diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c index 06f28afb06..49352bb42e 100644 --- a/src/lib/edje/edje_program.c +++ b/src/lib/edje/edje_program.c @@ -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 |