Revert "Eo: Optimise event callback call"
authorTom Hacohen <tom@stosb.com>
Mon, 9 Nov 2015 14:06:39 +0000 (14:06 +0000)
committerTom Hacohen <tom@stosb.com>
Mon, 9 Nov 2015 14:06:39 +0000 (14:06 +0000)
This reverts commit 4b116627c24a43248abf5a34a391241b1c0cf983.

This can't be done, because the freeze state can change from within the
callbacks so you need to check if events are frozen every time.

src/lib/eo/eo_base_class.c

index daf7a9d..f99ca37 100644 (file)
@@ -671,45 +671,48 @@ _eo_base_event_callback_call(Eo *obj_id, Eo_Base_Data *pd,
 
    pd->walking_list++;
 
-   if (!desc->unfreezable && (event_freeze_count || pd->event_freeze_count))
-     goto end;
-
    for (cb = pd->callbacks; cb; cb = cb->next)
      {
-        if (cb->delete_me)
-          continue;
-
-        if (cb->func_array)
+        if (!cb->delete_me)
           {
-             const Eo_Callback_Array_Item *it;
+             if (cb->func_array)
+               {
+                  const Eo_Callback_Array_Item *it;
 
-             for (it = cb->items.item_array; it->func; it++)
+                  for (it = cb->items.item_array; it->func; it++)
+                    {
+                       if (!_cb_desc_match(it->desc, desc))
+                          continue;
+                       if (!it->desc->unfreezable &&
+                           (event_freeze_count || pd->event_freeze_count))
+                          continue;
+
+                       /* Abort callback calling if the func says so. */
+                       if (!it->func((void *) cb->func_data, obj_id, desc,
+                                (void *) event_info))
+                         {
+                            ret = EINA_FALSE;
+                            goto end;
+                         }
+                    }
+               }
+             else
                {
-                  if (!_cb_desc_match(it->desc, desc))
+                  if (!_cb_desc_match(cb->items.item.desc, desc))
+                    continue;
+                  if (!cb->items.item.desc->unfreezable &&
+                      (event_freeze_count || pd->event_freeze_count))
                     continue;
 
                   /* Abort callback calling if the func says so. */
-                  if (!it->func((void *) cb->func_data, obj_id, desc,
-                                (void *) event_info))
+                  if (!cb->items.item.func((void *) cb->func_data, obj_id, desc,
+                                           (void *) event_info))
                     {
                        ret = EINA_FALSE;
                        goto end;
                     }
                }
           }
-        else
-          {
-             if (!_cb_desc_match(cb->items.item.desc, desc))
-               continue;
-
-             /* Abort callback calling if the func says so. */
-             if (!cb->items.item.func((void *) cb->func_data, obj_id, desc,
-                                      (void *) event_info))
-               {
-                  ret = EINA_FALSE;
-                  goto end;
-               }
-          }
      }
 
 end: