summaryrefslogtreecommitdiff
path: root/src/lib/edje_match.c
diff options
context:
space:
mode:
authorJaehwan Kim <jae.hwan.kim@samsung.com>2012-08-07 18:03:25 +0900
committerJaehwan Kim <jae.hwan.kim@samsung.com>2012-08-07 18:04:03 +0900
commit6319c761a2e2ba50b4c916284cb300f1ff3dd115 (patch)
treeee7983d1f93feeb6125a027ba7444902da2a01b6 /src/lib/edje_match.c
parent9d1ba0d03223a3017d2d0251dcaefb1f66ff879b (diff)
parentab7e8b5240ba7a2a73ed207b1a20834f28dbbd97 (diff)
downloadedje-6319c761a2e2ba50b4c916284cb300f1ff3dd115.tar.gz
edje-6319c761a2e2ba50b4c916284cb300f1ff3dd115.tar.bz2
edje-6319c761a2e2ba50b4c916284cb300f1ff3dd115.zip
EFL core migration @74702
Merge remote-tracking branch 'origin/upstream' into HEAD Conflicts: ChangeLog configure.ac src/bin/edje_cc.c src/bin/edje_cc_handlers.c src/lib/edje_entry.c src/lib/edje_multisense.c
Diffstat (limited to 'src/lib/edje_match.c')
-rw-r--r--src/lib/edje_match.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/lib/edje_match.c b/src/lib/edje_match.c
index f113f7b..375634e 100644
--- a/src/lib/edje_match.c
+++ b/src/lib/edje_match.c
@@ -449,7 +449,7 @@ edje_match_programs_exec_check_finals(const size_t *signal_finals,
}
static int
-edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
+edje_match_callback_exec_check_finals(const Edje_Patterns *signal_ppat,
const Edje_Patterns *source_ppat,
const size_t *signal_finals,
const size_t *source_finals,
@@ -462,10 +462,14 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
Eina_Bool prop
)
{
+ Edje_Signal_Callback *escb;
+ Eina_Array run;
size_t i;
size_t j;
int r = 1;
+ eina_array_step_set(&run, sizeof (Eina_Array), 4);
+
for (i = 0; i < signal_states->size; ++i)
{
if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
@@ -475,8 +479,6 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
if (signal_states->states[i].idx == source_states->states[j].idx
&& source_states->states[j].pos >= source_finals[source_states->states[j].idx])
{
- Edje_Signal_Callback *escb;
-
escb = eina_list_nth(callbacks, signal_states->states[i].idx);
if (escb)
{
@@ -484,19 +486,25 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
if ((!escb->just_added)
&& (!escb->delete_me))
{
- escb->func(escb->data, ed->obj, sig, source);
+ eina_array_push(&run, escb);
r = 2;
}
- if (_edje_block_break(ed))
- return 0;
- if ((singal_ppat->delete_me) || (source_ppat->delete_me))
- return 0;
}
}
}
}
}
+ while ((escb = eina_array_pop(&run)))
+ {
+ escb->func(escb->data, ed->obj, sig, source);
+ if (_edje_block_break(ed))
+ return 0;
+ if ((signal_ppat->delete_me) || (source_ppat->delete_me))
+ return 0;
+ }
+ eina_array_flush(&run);
+
return r;
}