Revert "edje: fix run on 64bits system."
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 17 Mar 2013 11:00:20 +0000 (20:00 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 17 Mar 2013 11:00:20 +0000 (20:00 +0900)
This reverts commit d482c5cc59f9b572ec37c8e68434a12e50479c00.

src/lib/edje/edje_match.c
src/lib/edje/edje_private.h
src/lib/edje/edje_program.c
src/lib/edje/edje_signal.c

index 5db023c76178a19dc99fa164b598037544b3ff80..5d66b618aca8ef869ba90db4ab86f493b99e795e 100644 (file)
@@ -509,6 +509,8 @@ edje_match_programs_exec_check_finals(const unsigned int *signal_finals,
 static int
 edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
                                       const Edje_Signal_Callback_Match    *matches,
+                                      const void       **custom_data,
+                                      const Eina_Bool   *flags,
                                       const Edje_States *signal_states,
                                       const Edje_States *source_states,
                                       const char        *sig,
@@ -539,7 +541,7 @@ edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
                     cb = &matches[*e];
                     if (cb)
                       {
-                        if ((prop) && _edje_signal_callback_prop(ed->callbacks->flags, *e)) continue;
+                         if ((prop) && _edje_signal_callback_prop(flags, *e)) continue;
                         eina_array_push(&run, cb);
                         r = 2;
                       }
@@ -551,9 +553,7 @@ edje_match_callback_exec_check_finals(const Edje_Signals_Sources_Patterns *ssp,
      {
         int idx = cb - matches;
 
-       if (_edje_signal_callback_run(ed->callbacks->flags, idx)) continue; 
-
-        cb->func((void*) ed->callbacks->custom_data[idx], ed->obj, sig, source);
+        cb->func((void*) custom_data[idx], ed->obj, sig, source);
         if (_edje_block_break(ed))
          {
              r = 0;
@@ -684,6 +684,8 @@ edje_match_programs_exec(const Edje_Patterns    *ppat_signal,
 int
 edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
                         const Edje_Signal_Callback_Match *matches,
+                        const void **custom_data,
+                        const Eina_Bool *flags,
                          const char *sig,
                          const char *source,
                          Edje *ed,
@@ -711,6 +713,8 @@ edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
    if (signal_result && source_result)
      r = edje_match_callback_exec_check_finals(ssp,
                                               matches,
+                                              custom_data,
+                                              flags,
                                                signal_result,
                                                source_result,
                                                sig,
index 376cb1b7092da301514e31f10f8a522a3e4be506..c6bd23601907a0fd2da61ae985c332c04e8bf51b 100644 (file)
@@ -1836,6 +1836,8 @@ Eina_Bool        edje_match_programs_exec(const Edje_Patterns    *ppat_signal,
                                           Eina_Bool               prop);
 int edje_match_callback_exec(const Edje_Signals_Sources_Patterns *ssp,
                             const Edje_Signal_Callback_Match *matches,
+                            const void **custom_data,
+                            const Eina_Bool *flags,
                             const char *sig,
                             const char *source,
                             Edje *ed,
@@ -1965,8 +1967,6 @@ 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);
 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_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);
 
index b916d7613ecfb39af6345e5761ecde6ba1910163..2eb36306d0c29367b204f22c89b76e52327748e2 100644 (file)
@@ -1408,6 +1408,8 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
 {
    const Edje_Signals_Sources_Patterns *ssp;
    Edje_Signal_Callback_Matches *m;
+   const void **custom_data;
+   Eina_Bool *flags;
    const Eina_Inarray *match;
    int r = 1;
 
@@ -1418,18 +1420,22 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
    _edje_freeze(ed);
    _edje_block(ed);
 
-   ed->walking_callbacks++;
-
    ssp = _edje_signal_callback_patterns_ref(ed->callbacks);
 
    m = (Edje_Signal_Callback_Matches*) ed->callbacks->matches;
    EINA_REFCOUNT_REF(m);
 
    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))
      r = edje_match_callback_exec(ssp,
                                  m->matches,
+                                 custom_data,
+                                 flags,
                                   sig,
                                   src,
                                   ed,
@@ -1447,13 +1453,11 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
 
         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->func((void*) ed->callbacks->custom_data[*i], ed->obj, sig, src);
+             if ((prop) && (_edje_signal_callback_prop(flags, *i))) continue;
+
+             cb->func((void*) custom_data[*i], ed->obj, sig, src);
              if (_edje_block_break(ed))
                break;
           }
@@ -1464,12 +1468,6 @@ _edje_emit_cb(Edje *ed, const char *sig, const char *src, Edje_Message_Signal_Da
 
    _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_thaw(ed);
    _edje_unref(ed);
index 8bf5645cf0b76bc41057ccd9a5bbab008e3b4a63..3dfdae1230b50f11c3c23160d96d16088defc022 100644 (file)
@@ -475,27 +475,3 @@ _edje_signal_callback_patterns_unref(const Edje_Signals_Sources_Patterns *essp)
       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;
-}
-