diff --git a/legacy/edje/data/src/e_logo.edc b/legacy/edje/data/src/e_logo.edc index 4f8d87d686..edf749f03c 100644 --- a/legacy/edje/data/src/e_logo.edc +++ b/legacy/edje/data/src/e_logo.edc @@ -356,6 +356,12 @@ collections { action, ACTION_STOP; target, "logo_animate"; } + program { + name, "logo_animate_signal"; + signal, "mouse,up,1"; + source, "logo_anim"; + action, SIGNAL_EMIT "do_it" "the_source"; + } } } } diff --git a/legacy/edje/src/bin/edje_cc_handlers.c b/legacy/edje/src/bin/edje_cc_handlers.c index ea15c86c72..1bd4479598 100644 --- a/legacy/edje/src/bin/edje_cc_handlers.c +++ b/legacy/edje/src/bin/edje_cc_handlers.c @@ -1004,12 +1004,18 @@ st_collections_group_programs_program_action(void) ep->action = parse_enum(0, "STATE_SET", EDJE_ACTION_TYPE_STATE_SET, "ACTION_STOP", EDJE_ACTION_TYPE_ACTION_STOP, + "SIGNAL_EMIT", EDJE_ACTION_TYPE_SIGNAL_EMIT, NULL); if (ep->action == EDJE_ACTION_TYPE_STATE_SET) { ep->state = parse_str(1); ep->value = parse_float_range(2, 0.0, 1.0); } + else if (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT) + { + ep->state = parse_str(1); + ep->state2 = parse_str(2); + } } static void diff --git a/legacy/edje/src/lib/edje_main.c b/legacy/edje/src/lib/edje_main.c index 53637f3b6d..645dac07d8 100644 --- a/legacy/edje/src/lib/edje_main.c +++ b/legacy/edje/src/lib/edje_main.c @@ -1,18 +1,15 @@ #include "Edje.h" #include "edje_private.h" -/* FIXME: finish ACTION_STOP action */ -/* FIXME: add a "SIGNAL_EMIT action to emit fake (or real) signals */ -/* FIXME: somehow handle double click? */ +/* FIXME: ? somehow handle double click? */ /* FIXME: free stuff - no more leaks */ -/* FIXME: new prog starts while current program is running on part, stop old */ -/* FIXME: add numeric params to conditiosn for progs (ranges etc.) */ +/* FIXME: ? add numeric params to conditions for progs (ranges etc.) */ /* FIXME: dragables havwe to work */ /* FIXME: drag start/top signals etc. */ /* FIXME: app has to be able to have callbacks called on signal emits */ /* FIXME: app has to be able to emit signals */ -/* FIXME: named parts need to be able to be "replaceD" with new evas objects */ -/* FIXME; need to be able to calculate min & max size of a whole edje */ +/* FIXME: named parts need to be able to be "replaced" with new evas objects */ +/* FIXME: need to be able to calculate min & max size of a whole edje */ Edje *_edje_fetch(Evas_Object *obj); Edje *_edje_add(Evas_Object *obj); @@ -74,7 +71,6 @@ static Ecore_Timer *_edje_timer = NULL; static Evas_List *_edje_animators = NULL; static Evas_Hash *_edje_file_hash = NULL; - static Evas_Smart *_edje_smart = NULL; void @@ -688,6 +684,10 @@ _edje_program_run(Edje *ed, Edje_Program *pr) } } } + else if (pr->action == EDJE_ACTION_TYPE_SIGNAL_EMIT) + { + _edje_emit(ed, pr->state, pr->state2); + } } static void @@ -1424,6 +1424,7 @@ _edje_edd_setup(void) EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "source", source, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "action", action, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state", state, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state2", state2, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "value", value, EET_T_DOUBLE); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.mode", tween.mode, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.time", tween.time, EET_T_DOUBLE); diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index d6ae8a3d12..c14b71d335 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -35,15 +35,14 @@ * tween to the new state. * * the signals that can be emitted are: - * "mouse.down" - * "mouse.up" - * "mouse.in" - * "mouse.out" - * "mouse.move" - * "clicked" - * "drag.start" + * "mouse,down" + * "mouse,up" + * "mouse,in" + * "mouse,out" + * "mouse,move" + * "drag,start" * "drag" - * "drag.stop" + * "drag,stop" */ typedef struct _Edje_File Edje_File; @@ -82,6 +81,7 @@ typedef struct _Edje_Part_Description Edje_Part_Description; #define EDJE_ACTION_TYPE_NONE 0 #define EDJE_ACTION_TYPE_STATE_SET 1 #define EDJE_ACTION_TYPE_ACTION_STOP 2 +#define EDJE_ACTION_TYPE_SIGNAL_EMIT 3 #define EDJE_ACTION_TYPE_LAST 4 #define EDJE_TWEEN_MODE_NONE 0 @@ -131,6 +131,7 @@ struct _Edje_Program /* a conditional program to be run */ int action; /* type - set state, stop action, set drag pos etc. */ char *state; /* what state of alternates to apply, NULL = default */ + char *state2; /* what other state to use - for signal emit action */ double value; /* value of state to apply (if multiple names match) */ struct {