forked from enlightenment/efl
edje: fix run on 64bits system.
This commit is contained in:
parent
d4172f555a
commit
d482c5cc59
|
@ -509,8 +509,6 @@ edje_match_programs_exec_check_finals(const unsigned int *signal_finals,
|
||||||
static int
|
static int
|
||||||
edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
|
edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
const Edje_Signal_Callback_Match *matches,
|
const Edje_Signal_Callback_Match *matches,
|
||||||
const void **custom_data,
|
|
||||||
const Eina_Bool *flags,
|
|
||||||
const Edje_States *signal_states,
|
const Edje_States *signal_states,
|
||||||
const Edje_States *source_states,
|
const Edje_States *source_states,
|
||||||
const char *sig,
|
const char *sig,
|
||||||
|
@ -541,7 +539,7 @@ edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
cb = &matches[*e];
|
cb = &matches[*e];
|
||||||
if (cb)
|
if (cb)
|
||||||
{
|
{
|
||||||
if ((prop) && _edje_signal_callback_prop(flags, *e)) continue;
|
if ((prop) && _edje_signal_callback_prop(ed->callbacks->flags, *e)) continue;
|
||||||
eina_array_push(&run, cb);
|
eina_array_push(&run, cb);
|
||||||
r = 2;
|
r = 2;
|
||||||
}
|
}
|
||||||
|
@ -553,7 +551,9 @@ edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
{
|
{
|
||||||
int idx = cb - matches;
|
int idx = cb - matches;
|
||||||
|
|
||||||
cb->func((void*) custom_data[idx], ed->obj, sig, source);
|
if (_edje_signal_callback_run(ed->callbacks->flags, idx)) continue;
|
||||||
|
|
||||||
|
cb->func((void*) ed->callbacks->custom_data[idx], ed->obj, sig, source);
|
||||||
if (_edje_block_break(ed))
|
if (_edje_block_break(ed))
|
||||||
{
|
{
|
||||||
r = 0;
|
r = 0;
|
||||||
|
@ -684,8 +684,6 @@ edje_match_programs_exec(const Edje_Patterns *ppat_signal,
|
||||||
int
|
int
|
||||||
edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
|
edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
const Edje_Signal_Callback_Match *matches,
|
const Edje_Signal_Callback_Match *matches,
|
||||||
const void **custom_data,
|
|
||||||
const Eina_Bool *flags,
|
|
||||||
const char *sig,
|
const char *sig,
|
||||||
const char *source,
|
const char *source,
|
||||||
Edje *ed,
|
Edje *ed,
|
||||||
|
@ -713,8 +711,6 @@ edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
if (signal_result && source_result)
|
if (signal_result && source_result)
|
||||||
r = edje_match_callback_exec_check_finals(ssp,
|
r = edje_match_callback_exec_check_finals(ssp,
|
||||||
matches,
|
matches,
|
||||||
custom_data,
|
|
||||||
flags,
|
|
||||||
signal_result,
|
signal_result,
|
||||||
source_result,
|
source_result,
|
||||||
sig,
|
sig,
|
||||||
|
|
|
@ -1836,8 +1836,6 @@ Eina_Bool edje_match_programs_exec(const Edje_Patterns *ppat_signal,
|
||||||
Eina_Bool prop);
|
Eina_Bool prop);
|
||||||
int edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
|
int edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
|
||||||
const Edje_Signal_Callback_Match *matches,
|
const Edje_Signal_Callback_Match *matches,
|
||||||
const void **custom_data,
|
|
||||||
const Eina_Bool *flags,
|
|
||||||
const char *sig,
|
const char *sig,
|
||||||
const char *source,
|
const char *source,
|
||||||
Edje *ed,
|
Edje *ed,
|
||||||
|
@ -1967,6 +1965,8 @@ void _edje_signals_sources_patterns_clean(Edje_Signals_Sources_Patterns *ssp);
|
||||||
const Edje_Signals_Sources_Patterns *_edje_signal_callback_patterns_ref(const Edje_Signal_Callback_Group *gp);
|
const Edje_Signals_Sources_Patterns *_edje_signal_callback_patterns_ref(const Edje_Signal_Callback_Group *gp);
|
||||||
void _edje_signal_callback_patterns_unref(const Edje_Signals_Sources_Patterns *essp);
|
void _edje_signal_callback_patterns_unref(const Edje_Signals_Sources_Patterns *essp);
|
||||||
Eina_Bool _edje_signal_callback_prop(const Eina_Bool *flags, int i);
|
Eina_Bool _edje_signal_callback_prop(const Eina_Bool *flags, int i);
|
||||||
|
Eina_Bool _edje_signal_callback_run(const Eina_Bool *flags, unsigned int i);
|
||||||
|
void _edje_signal_callback_reset(Eina_Bool *flags, unsigned int length);
|
||||||
|
|
||||||
void _edje_signal_callback_free(const Edje_Signal_Callback_Group *gp);
|
void _edje_signal_callback_free(const Edje_Signal_Callback_Group *gp);
|
||||||
|
|
||||||
|
|
|
@ -1408,8 +1408,6 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
|
||||||
{
|
{
|
||||||
const Edje_Signals_Sources_Patterns *ssp;
|
const Edje_Signals_Sources_Patterns *ssp;
|
||||||
Edje_Signal_Callback_Matches *m;
|
Edje_Signal_Callback_Matches *m;
|
||||||
const void **custom_data;
|
|
||||||
Eina_Bool *flags;
|
|
||||||
const Eina_Inarray *match;
|
const Eina_Inarray *match;
|
||||||
int r = 1;
|
int r = 1;
|
||||||
|
|
||||||
|
@ -1420,22 +1418,18 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
|
||||||
_edje_freeze(ed);
|
_edje_freeze(ed);
|
||||||
_edje_block(ed);
|
_edje_block(ed);
|
||||||
|
|
||||||
|
ed->walking_callbacks++;
|
||||||
|
|
||||||
ssp = _edje_signal_callback_patterns_ref(ed->callbacks);
|
ssp = _edje_signal_callback_patterns_ref(ed->callbacks);
|
||||||
|
|
||||||
m = (Edje_Signal_Callback_Matches*) ed->callbacks->matches;
|
m = (Edje_Signal_Callback_Matches*) ed->callbacks->matches;
|
||||||
EINA_REFCOUNT_REF(m);
|
EINA_REFCOUNT_REF(m);
|
||||||
|
|
||||||
callback_extra_data = (data) ? data->data : NULL;
|
callback_extra_data = (data) ? data->data : NULL;
|
||||||
custom_data = alloca(sizeof (void*) * m->matches_count);
|
|
||||||
memcpy(custom_data, ed->callbacks->custom_data, sizeof (void*) * m->matches_count);
|
|
||||||
flags = alloca(sizeof (Eina_Bool) * m->matches_count);
|
|
||||||
memcpy(flags, ed->callbacks->flags, sizeof (Eina_Bool) * (m->matches_count >> 1));
|
|
||||||
|
|
||||||
if (eina_inarray_count(&ssp->u.callbacks.globing))
|
if (eina_inarray_count(&ssp->u.callbacks.globing))
|
||||||
r = edje_match_callback_exec(ssp,
|
r = edje_match_callback_exec(ssp,
|
||||||
m->matches,
|
m->matches,
|
||||||
custom_data,
|
|
||||||
flags,
|
|
||||||
sig,
|
sig,
|
||||||
src,
|
src,
|
||||||
ed,
|
ed,
|
||||||
|
@ -1453,11 +1447,13 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
|
||||||
|
|
||||||
EINA_INARRAY_FOREACH(match, i)
|
EINA_INARRAY_FOREACH(match, i)
|
||||||
{
|
{
|
||||||
|
if (_edje_signal_callback_run(ed->callbacks->flags, *i)) continue;
|
||||||
|
if ((prop) && (_edje_signal_callback_prop(ed->callbacks->flags,
|
||||||
|
*i))) continue;
|
||||||
|
|
||||||
cb = &m->matches[*i];
|
cb = &m->matches[*i];
|
||||||
|
|
||||||
if ((prop) && (_edje_signal_callback_prop(flags, *i))) continue;
|
cb->func((void*) ed->callbacks->custom_data[*i], ed->obj, sig, src);
|
||||||
|
|
||||||
cb->func((void*) custom_data[*i], ed->obj, sig, src);
|
|
||||||
if (_edje_block_break(ed))
|
if (_edje_block_break(ed))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1468,6 +1464,12 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
|
||||||
|
|
||||||
_edje_signal_callback_patterns_unref(ssp);
|
_edje_signal_callback_patterns_unref(ssp);
|
||||||
|
|
||||||
|
ed->walking_callbacks--;
|
||||||
|
|
||||||
|
if (ed->walking_callbacks == 0)
|
||||||
|
_edje_signal_callback_reset(ed->callbacks->flags,
|
||||||
|
ed->callbacks->matches->matches_count);
|
||||||
|
|
||||||
_edje_unblock(ed);
|
_edje_unblock(ed);
|
||||||
_edje_thaw(ed);
|
_edje_thaw(ed);
|
||||||
_edje_unref(ed);
|
_edje_unref(ed);
|
||||||
|
|
|
@ -475,3 +475,27 @@ _edje_signal_callback_patterns_unref(const Edje_Signals_Sources_Patterns *essp)
|
||||||
free(ssp);
|
free(ssp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
_edje_signal_callback_run(const Eina_Bool *flags, unsigned int i)
|
||||||
|
{
|
||||||
|
Eina_Bool r;
|
||||||
|
|
||||||
|
r = flags[i >> 1] & ((_DELETE_ME | _JUST_ADDED) << ((i & 0x1) * 4));
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_edje_signal_callback_reset(Eina_Bool *flags, unsigned int length)
|
||||||
|
{
|
||||||
|
Eina_Bool mask;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
mask = ~((_JUST_ADDED << 4) | _JUST_ADDED);
|
||||||
|
|
||||||
|
length >>= 1;
|
||||||
|
for (i = 0; i < length; ++i)
|
||||||
|
flags[i] &= mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue