summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2018-05-08 12:26:08 -0500
committerDerek Foreman <derekf@osg.samsung.com>2018-05-08 12:26:08 -0500
commit6d4f78d67644b2cff2c71df87d1549005f8d54e6 (patch)
tree6ea061dc1f60f4e84e86e26d4dc2a49e9acf57e1
parente12498f4d4e5dfb63052ac81ea4bc39056b8baa0 (diff)
downloadefl-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.h1
-rw-r--r--src/lib/edje/edje_program.c17
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