Merge "[genlist] Removed unnecessary variable. Upstream merge r60747."
[framework/uifw/elementary.git] / src / lib / elm_transit.c
index 7fb4fe0..fa921d3 100644 (file)
@@ -150,10 +150,15 @@ _hash_foreach_obj_states_save(const Eina_Hash *hash __UNUSED__, const void *key,
 static void
 _elm_transit_object_remove_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
 {
-   Elm_Transit *transit = data;
-   Elm_Obj_Data *obj_data = eina_hash_find(transit->objs_data_hash, obj);
+   Elm_Transit *transit;
+   Elm_Obj_Data *obj_data;
+   Eina_List *list;
+
+   transit = data;
+   list = eina_list_data_find_list(transit->objs, obj);
+   obj_data = eina_hash_find(transit->objs_data_hash, list);
    if (!obj_data) return;
-   eina_hash_del_by_key(transit->objs_data_hash, obj);
+   eina_hash_del_by_key(transit->objs_data_hash, list);
    evas_object_pass_events_set(obj, obj_data->pass_events);
    if (obj_data->state)
      free(obj_data->state);
@@ -176,7 +181,7 @@ _obj_damage_area_set(Evas_Object *obj)
    map  = evas_object_map_get(obj);
    if (!map) return;
 
-  evas_map_point_coord_get(map, 0, &coords.x, &coords.y, NULL);
+   evas_map_point_coord_get(map, 0, &coords.x, &coords.y, NULL);
 
    max = min = coords;
 
@@ -200,18 +205,41 @@ _obj_damage_area_set(Evas_Object *obj)
                              max.x - min.x, max.y - min.y);
 }
 
+static void
+_remove_obj_from_list(Elm_Transit *transit, Evas_Object *obj)
+{
+   evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
+                                       _elm_transit_object_remove_cb,
+                                       transit);
 
+   //Remove duplicated objects
+   //TODO: Need to consider about optimizing here
+   while(1)
+     {
+        if (!eina_list_data_find_list(transit->objs, obj))
+          break;
+        transit->objs = eina_list_remove(transit->objs, obj);
+     }
+}
 
 static void
 _elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj)
 {
-   Elm_Obj_Data *obj_data = eina_hash_find(transit->objs_data_hash, obj);
-   if (!obj_data) return;
-   eina_hash_del_by_key(transit->objs_data_hash, obj);
-   Elm_Obj_State *state = obj_data->state;
+   Elm_Obj_Data *obj_data;
+   Elm_Obj_State *state;
+   Eina_List *list;
 
+   list = eina_list_data_find_list(transit->objs, obj);
+   obj_data = eina_hash_find(transit->objs_data_hash, list);
+   if (!obj_data)
+     {
+        _remove_obj_from_list(transit, obj);
+        return;
+     }
+   eina_hash_del_by_key(transit->objs_data_hash, list);
+   _remove_obj_from_list(transit, obj);
    evas_object_pass_events_set(obj, obj_data->pass_events);
-
+   state = obj_data->state;
    if (state)
      {
         //recover the states of the object.
@@ -223,11 +251,11 @@ _elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj)
              if (state->visible) evas_object_show(obj);
              else evas_object_hide(obj);
              if (state->map_enabled)
-                evas_object_map_enable_set(obj, EINA_TRUE);
+               evas_object_map_enable_set(obj, EINA_TRUE);
              else
-                evas_object_map_enable_set(obj, EINA_FALSE);
+               evas_object_map_enable_set(obj, EINA_FALSE);
              if (state->map)
-                evas_object_map_set(obj, state->map);
+               evas_object_map_set(obj, state->map);
 
              //TODO: Remove!
              //Since evas map have a afterimage bug for this time.
@@ -239,18 +267,6 @@ _elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj)
      }
    free(obj_data);
 
-   //remove duplicated objects
-   //TODO: Need to consider about optimizing here
-   while(1)
-     {
-       if (!eina_list_data_find_list(transit->objs, obj))
-         break;
-       transit->objs = eina_list_remove(transit->objs, obj);
-     }
-
-   evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
-                                       _elm_transit_object_remove_cb,
-                                       transit);
 }
 
 static void
@@ -300,6 +316,7 @@ _elm_transit_del(Elm_Transit *transit)
      {
         effect_module = EINA_INLIST_CONTAINER_GET(transit->effect_list, Elm_Transit_Effect_Module);
         transit->effect_list = eina_inlist_remove(transit->effect_list, transit->effect_list);
+        _elm_transit_effect_del(transit, effect_module);
      }
 
    while (transit->objs)
@@ -390,7 +407,7 @@ _animator_animate_cb(void *data)
      {
         /* run chain transit */
         if (transit->next_chain_transits)
-           _chain_transits_go(transit);
+          _chain_transits_go(transit);
 
         elm_transit_del(transit);
         return ECORE_CALLBACK_CANCEL;
@@ -433,7 +450,7 @@ elm_transit_add(void)
 
    elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR);
 
-   transit->objs_data_hash = eina_hash_pointer_new(NULL);
+   transit->objs_data_hash = eina_hash_int32_new(NULL);
 
    return transit;
 }
@@ -585,7 +602,9 @@ elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj)
    ELM_TRANSIT_CHECK_OR_RETURN(transit);
    EINA_SAFETY_ON_NULL_RETURN(obj);
    Elm_Obj_Data *obj_data;
+   Eina_List * list;
 
+//TODO: Check the remove case of the same objects in this transit. 
    obj_data = ELM_NEW(Elm_Obj_Data);
    obj_data->pass_events = evas_object_pass_events_get(obj);
    if (!transit->event_enabled)
@@ -596,7 +615,8 @@ elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj)
                                   transit);
 
    transit->objs = eina_list_append(transit->objs, obj);
-   eina_hash_add(transit->objs_data_hash, obj, obj_data);
+   list = eina_list_last(transit->objs);
+   eina_hash_add(transit->objs_data_hash, list, obj_data);
 
    if (!transit->state_keep)
      _elm_transit_obj_states_save(obj, obj_data);
@@ -620,10 +640,6 @@ elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj)
 {
    ELM_TRANSIT_CHECK_OR_RETURN(transit);
    EINA_SAFETY_ON_NULL_RETURN(obj);
-   Elm_Obj_Data *obj_data;
-
-   obj_data = eina_hash_find(transit->objs_data_hash, obj);
-   if (!obj_data) return;
 
    _elm_transit_object_remove(transit, obj);
    if (!transit->objs) elm_transit_del(transit);
@@ -1060,7 +1076,8 @@ elm_transit_objects_final_state_keep_get(const Elm_Transit *transit)
  * @note @p chain_transit can not be NULL. Chain transits could be chained to the only one transit.
  *
  * @param transit The transit object.
- * @param chain_transit The chain transit object. This transit will be operated  *                      after transit is done.
+ * @param chain_transit The chain transit object. This transit will be operated  
+ *        after transit is done.
  *
  * @ingroup Transit
  */
@@ -1780,7 +1797,7 @@ _transit_effect_resizable_flip_op(Elm_Transit_Effect *effect, Elm_Transit *trans
 
    if (!resizable_flip->nodes)
      resizable_flip->nodes = _resizable_flip_nodes_build(transit,
-                                                          resizable_flip);
+                                                         resizable_flip);
 
    EINA_LIST_FOREACH(resizable_flip->nodes, elist, resizable_flip_node)
      {
@@ -2066,7 +2083,7 @@ _transit_effect_wipe_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double
         if (wipe->type == ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW)
           _elm_fx_wipe_show(map, wipe->dir, _x, _y, _w, _h, (float)progress);
         else
-           _elm_fx_wipe_hide(map, wipe->dir, _x, _y, _w, _h, (float)progress);
+          _elm_fx_wipe_hide(map, wipe->dir, _x, _y, _w, _h, (float)progress);
 
         evas_object_map_enable_set(obj, EINA_TRUE);
         evas_object_map_set(obj, map);