[Genlist] Remove unused variable
[framework/uifw/elementary.git] / src / lib / elm_genlist.c
index 5b8694b..4c3ba60 100644 (file)
@@ -22,7 +22,8 @@ EAPI const char ELM_GENLIST_PAN_SMART_NAME[] = "elm_genlist_pan";
 #define GL_IT(_it) (_it->item)
 
 #define IS_ROOT_PARENT_IT(_it) \
-   ((_it->group) || (GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0)) \
+   ((_it->group) || ((GL_IT(_it)->items && GL_IT(_it)->expanded_depth == 0)  \
+                      &&(!(GL_IT(_it)->type & ELM_GENLIST_ITEM_TREE)))) \
 
 static const Evas_Smart_Interface *_smart_interfaces[] =
 {
@@ -144,7 +145,7 @@ static void _item_select(Elm_Gen_Item *it);
 static void     _expand_toggle_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
 static void     _expand_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
 static void     _contract_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);
-static void _elm_genlist_item_state_update(Elm_Gen_Item *it, Item_Cache *ic);
+static void _elm_genlist_item_state_update(Elm_Gen_Item *it);
 static void _decorate_item_unrealize(Elm_Gen_Item *it);
 static void _decorate_all_item_unrealize(Elm_Gen_Item *it);
 static void _decorate_item_set(Elm_Gen_Item *it);
@@ -153,7 +154,7 @@ static void _changed_job(Elm_Genlist_Smart_Data *sd);
 #if GENLIST_FX_SUPPORT
 static Eina_Bool      _elm_genlist_fx_capture(Evas_Object *obj, int level);
 static void           _elm_genlist_fx_play(Evas_Object *obj);
-static void           _elm_genlist_fx_clear(Evas_Object *obj);
+static void           _elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force);
 static void           _elm_genlist_proxy_item_del(const Elm_Object_Item *item);
 #endif
 
@@ -467,13 +468,12 @@ _elm_genlist_pan_smart_resize(Evas_Object *obj,
    evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
    if ((ow == w) && (oh == h)) return;
 
-   psd->wsd->s_iface->content_viewport_size_get
-      (ELM_WIDGET_DATA(psd->wsd)->obj, &vw, NULL);
-   if (vw != 0) psd->wsd->prev_viewport_w = vw;
-
-
-   if (psd->wsd->mode == ELM_LIST_COMPRESS)
+   psd->wsd->s_iface->content_viewport_size_get(ELM_WIDGET_DATA(psd->wsd)->obj,
+                                                &vw, NULL);
+   if (psd->wsd->mode == ELM_LIST_COMPRESS &&
+       vw != psd->wsd->prev_viewport_w)
      psd->wsd->size_changed = EINA_TRUE;
+   if (vw != 0) psd->wsd->prev_viewport_w = vw;
 
    psd->wsd->pan_changed = EINA_TRUE;
    if (psd->wsd->calc_job) ecore_job_del(psd->wsd->calc_job);
@@ -962,65 +962,30 @@ _item_order_update(const Eina_Inlist *l,
 }
 
 static void
-_elm_genlist_item_state_update(Elm_Gen_Item *it,
-                               Item_Cache *itc)
+_elm_genlist_item_state_update(Elm_Gen_Item *it)
 {
-   if (itc)
+   if (it->selected)
      {
-        if (it->selected != itc->selected)
-          {
-             if (it->selected)
-               {
-                  if (it->deco_all_view)
-                    edje_object_signal_emit
-                      (it->deco_all_view, "elm,state,selected", "elm,nosound");
-                  edje_object_signal_emit
-                    (VIEW(it), "elm,state,selected", "elm,nosound");
-                  evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
-               }
-          }
-        if (elm_widget_item_disabled_get(it) != itc->disabled)
-          {
-             if (elm_widget_item_disabled_get(it))
-               edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
-             if (it->deco_all_view)
-               edje_object_signal_emit
-                 (it->deco_all_view, "elm,state,disabled", "elm");
-          }
-        if (it->item->expanded != itc->expanded)
-          {
-             if (it->item->expanded)
-               edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
-             if (it->deco_all_view)
-               edje_object_signal_emit
-                 (it->deco_all_view, "elm,state,expanded", "elm");
-          }
+        if (it->deco_all_view)
+           edje_object_signal_emit
+              (it->deco_all_view, "elm,state,selected", "elm");
+        edje_object_signal_emit
+           (VIEW(it), "elm,state,selected", "elm");
+        evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
      }
-   else
+   if (elm_widget_item_disabled_get(it))
      {
-        if (it->selected)
-          {
-             if (it->deco_all_view)
-               edje_object_signal_emit
-                 (it->deco_all_view, "elm,state,selected", "elm,nosound");
-             edje_object_signal_emit
-               (VIEW(it), "elm,state,selected", "elm,nosound");
-             evas_object_smart_callback_call(WIDGET(it), SIG_HIGHLIGHTED, it);
-          }
-        if (elm_widget_item_disabled_get(it))
-          {
-             edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
-             if (it->deco_all_view)
-               edje_object_signal_emit
-                 (it->deco_all_view, "elm,state,disabled", "elm");
-          }
-        if (it->item->expanded)
-          {
-             edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
-             if (it->deco_all_view)
-               edje_object_signal_emit
-                 (it->deco_all_view, "elm,state,expanded", "elm");
-          }
+        edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm");
+        if (it->deco_all_view)
+           edje_object_signal_emit
+              (it->deco_all_view, "elm,state,disabled", "elm");
+     }
+   if (it->item->expanded)
+     {
+        edje_object_signal_emit(VIEW(it), "elm,state,expanded", "elm");
+        if (it->deco_all_view)
+           edje_object_signal_emit
+              (it->deco_all_view, "elm,state,expanded", "elm");
      }
 }
 
@@ -1121,16 +1086,8 @@ _item_mode_content_realize(Elm_Gen_Item *it,
                        // 1. Add resize callback for multiline entry.
                        // 2. Do not unrealize it for focus issue
                        // ps. Only for entry because of performnace
-                       if (!strcmp("elm_layout", evas_object_type_get(ic)))
-                         {
-                            // If editfield style, it can have entry.
-                            const char *group;
-                            edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
-                            if (group && !strncmp("elm/layout/editfield/", group, 20))
-                              it->item->unrealize_disabled = EINA_TRUE;
-                         }
-                       else if (!strcmp("elm_entry", evas_object_type_get(ic)))
-                          it->item->unrealize_disabled = EINA_TRUE;
+                       if (!strcmp("elm_entry", evas_object_type_get(ic)))
+                         it->item->unrealize_disabled = EINA_TRUE;
                     }
 #endif
 #if 0
@@ -1269,7 +1226,7 @@ _decorate_all_item_realize(Elm_Gen_Item *it,
      (it->deco_all_view, elm_widget_mirrored_get(WIDGET(it)));
 
    _elm_genlist_item_odd_even_update(it);
-   _elm_genlist_item_state_update(it, NULL);
+   _elm_genlist_item_state_update(it);
 
 #if 1 // FIXME: difference from upstream
    if (GL_IT(it)->wsd->reorder_mode)
@@ -1412,25 +1369,12 @@ _item_content_realize(Elm_Gen_Item *it,
                   // 1. Add resize callback for multiline entry.
                   // 2. Do not unrealize it for focus issue
                   // ps. Only for entry because of performnace
-                  if (!strcmp("elm_layout", evas_object_type_get(ic)))
+                  if (!strcmp("elm_entry", evas_object_type_get(ic)))
                     {
-                       // If editfield style, it can have entry.
-                       const char *group;
-                       edje_object_file_get(elm_layout_edje_get(ic), NULL, &group);
-                       if (group && !strncmp("elm/layout/editfield/", group, 20))
-                         {
-                            evas_object_event_callback_add
-                               (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                                _changed_size_hints, it);
-                            it->item->unrealize_disabled = EINA_TRUE;
-                         }
-
-                    }
-                  else if (!strcmp("elm_entry", evas_object_type_get(ic)))
-                    {
-                       evas_object_event_callback_add
-                          (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                           _changed_size_hints, it);
+                       if (!elm_entry_single_line_get(ic))
+                         evas_object_event_callback_add
+                            (ic, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                             _changed_size_hints, it);
                        it->item->unrealize_disabled = EINA_TRUE;
                     }
 #endif
@@ -1544,7 +1488,6 @@ _item_realize(Elm_Gen_Item *it,
               int in,
               Eina_Bool calc)
 {
-   Item_Cache *itc = NULL;
    const char *treesize;
    char buf[1024];
    int tsize = 20;
@@ -1554,7 +1497,7 @@ _item_realize(Elm_Gen_Item *it,
         if (it->item->order_num_in != in)
           {
              _item_order_update(EINA_INLIST_GET(it), in);
-             _elm_genlist_item_state_update(it, NULL);
+             _elm_genlist_item_state_update(it);
              _elm_genlist_item_index_update(it);
           }
         return;
@@ -1654,7 +1597,7 @@ _item_realize(Elm_Gen_Item *it,
             (it->itc->decorate_all_item_style))
           _decorate_all_item_realize(it, EINA_FALSE);
 
-        _elm_genlist_item_state_update(it, itc);
+        _elm_genlist_item_state_update(it);
         _elm_genlist_item_index_update(it);
      }
 
@@ -1867,7 +1810,7 @@ _reorder_move_animator_cb(void *data)
    Eina_Bool down = EINA_FALSE;
    int y, dy, diff;
 
-   dy = 6 * elm_config_scale_get();
+   dy = 20 * elm_config_scale_get();
    t = ((0.0 > (t = ecore_loop_time_get()
                   - GL_IT(it)->wsd->start_time)) ? 0.0 : t);
 
@@ -2150,7 +2093,8 @@ _changed_job(Elm_Genlist_Smart_Data *sd)
                        sd->group_item_width = mw;
                        sd->group_item_height = mh;
                     }
-                  else if ((!sd->item_width) && (it->item->type == ELM_GENLIST_ITEM_NONE))
+                  else if ((!sd->item_width) &&
+                           (it->item->type == ELM_GENLIST_ITEM_NONE))
                     {
                        sd->item_width = mw;
                        sd->item_height = mh;
@@ -2207,7 +2151,7 @@ _elm_genlist_pan_smart_calculate(Evas_Object *obj)
 #if GROUP_ITEMS_FEATURE
        git->item->want_realize = EINA_FALSE;
 #else
-       _item_unrealize(git, EINA_TRUE);
+       evas_object_hide(VIEW(git));
 #endif
     }
 
@@ -2635,11 +2579,7 @@ _elm_genlist_smart_focus_next(const Evas_Object *obj,
                   if (it->realized)
                     {
                        evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
-
-                       /* check item which displays more than half of its size */
-                       if (ELM_RECTS_INTERSECT
-                             (x + (w / 2), y + (h / 2), 0, 0, sx, sy, sw, sh))
-                         items = eina_list_append(items, it->base.access_obj);
+                       items = eina_list_append(items, it->base.access_obj);
 
                        if (!it->base.access_order) continue;
 
@@ -3018,7 +2958,7 @@ _decorate_all_item_unrealize(Elm_Gen_Item *it)
    evas_object_smart_member_add(VIEW(it), GL_IT(it)->wsd->pan_obj);
    elm_widget_sub_object_add(WIDGET(it), VIEW(it));
    _elm_genlist_item_odd_even_update(it);
-   _elm_genlist_item_state_update(it, NULL);
+   _elm_genlist_item_state_update(it);
 
    edje_object_signal_emit
      (it->deco_all_view, "elm,state,decorate,disabled", "elm");
@@ -3460,11 +3400,6 @@ _item_multi_down_cb(void *data,
    GL_IT(it)->wsd->multi_touched = EINA_TRUE;
    GL_IT(it)->wsd->prev_mx = ev->canvas.x;
    GL_IT(it)->wsd->prev_my = ev->canvas.y;
-   /*
-   if (!GL_IT(it)->wsd->wasselected)
-     _item_unselect(it);
-   GL_IT(it)->wsd->wasselected = EINA_FALSE;
-     */
    if (it->long_timer)
      {
         ecore_timer_del(it->long_timer);
@@ -3968,39 +3903,28 @@ _queue_process(Elm_Genlist_Smart_Data *sd)
 }
 
 static Eina_Bool
-_idle_process(void *data,
-              Eina_Bool *wakeup)
-{
-   Elm_Genlist_Smart_Data *sd = data;
-
-   if (_queue_process(sd) > 0) *wakeup = EINA_TRUE;
-   if (!sd->queue)
-     {
-        return ECORE_CALLBACK_CANCEL;
-     }
-#if GENLIST_FX_SUPPORT
-   if (sd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
-#endif
-   return ECORE_CALLBACK_RENEW;
-}
-
-static Eina_Bool
 _item_idle_enterer(void *data)
 {
-   Eina_Bool wakeup = EINA_FALSE;
    Elm_Genlist_Smart_Data *sd = data;
-   Eina_Bool ok = _idle_process(data, &wakeup);
 
-   if (wakeup)
+   if (sd->prev_viewport_w == 0) return ECORE_CALLBACK_RENEW;
+   if (_queue_process(sd) > 0)
      {
         // wake up mainloop
+        // Job always be alive because idle_enterer should be alive
         if (sd->calc_job) ecore_job_del(sd->calc_job);
         sd->calc_job = ecore_job_add(_calc_job, sd);
      }
-   if (ok == ECORE_CALLBACK_CANCEL) sd->queue_idle_enterer = NULL;
+   if (!sd->queue)
+     {
+        sd->queue_idle_enterer = NULL;
+        return ECORE_CALLBACK_CANCEL;
+     }
 
-   return ok;
+#if GENLIST_FX_SUPPORT
+   _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
+#endif
+   return ECORE_CALLBACK_RENEW;
 }
 
 static void
@@ -4481,6 +4405,9 @@ static void
 _scroll_animate_start_cb(Evas_Object *obj,
                          void *data __UNUSED__)
 {
+#if GENLIST_FX_SUPPORT
+   _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
    evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_START, NULL);
 }
 
@@ -4488,6 +4415,9 @@ static void
 _scroll_animate_stop_cb(Evas_Object *obj,
                         void *data __UNUSED__)
 {
+#if GENLIST_FX_SUPPORT
+   _elm_genlist_fx_clear(obj, EINA_FALSE);
+#endif
    evas_object_smart_callback_call(obj, SIG_SCROLL_ANIM_STOP, NULL);
 }
 
@@ -5507,7 +5437,7 @@ elm_genlist_item_sorted_insert(Evas_Object *obj,
 }
 
 static void
-_elm_genlist_fx_clear(Evas_Object *obj)
+_elm_genlist_fx_clear(Evas_Object *obj, Eina_Bool force)
 {
    ELM_GENLIST_DATA_GET(obj, sd);
 
@@ -5515,6 +5445,8 @@ _elm_genlist_fx_clear(Evas_Object *obj)
    Proxy_Item *pi;
    Elm_Gen_Item *it;
 
+   if ((!force) && (!sd->fx_first_captured)) return;
+
    EINA_LIST_FREE(sd->capture_before_items, pi)
      {
         if ((pi->it) && (GL_IT(pi->it))) GL_IT(pi->it)->has_proxy_it = EINA_FALSE;
@@ -5575,7 +5507,7 @@ elm_genlist_clear(Evas_Object *obj)
 #if GENLIST_FX_SUPPORT
    if (sd->fx_mode)
      {
-        _elm_genlist_fx_clear(obj);
+        _elm_genlist_fx_clear(obj, EINA_TRUE);
         sd->genlist_clearing = EINA_TRUE;
         sd->rendered = EINA_FALSE;
      }
@@ -6111,8 +6043,7 @@ elm_genlist_item_update(Elm_Object_Item *item)
 #endif
 
 #if GENLIST_FX_SUPPORT
-   if (GL_IT(it)->wsd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj);
+     _elm_genlist_fx_clear(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj, EINA_FALSE);
 #endif
 
    if (GL_IT(it)->wsd->update_job) ecore_job_del(GL_IT(it)->wsd->update_job);
@@ -6192,6 +6123,7 @@ elm_genlist_item_item_class_update(Elm_Object_Item *item,
    if (!it->item->block) return;
    EINA_SAFETY_ON_NULL_RETURN(itc);
    it->itc = itc;
+
    it->item->nocache_once = EINA_TRUE;
 
    elm_widget_stringlist_free(it->texts);
@@ -6683,9 +6615,7 @@ elm_genlist_decorate_mode_set(Evas_Object *obj,
           }
      }
 #if GENLIST_FX_SUPPORT
-   if (sd->fx_first_captured)
-     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj);
-
+     _elm_genlist_fx_clear(ELM_WIDGET_DATA(sd)->obj, EINA_FALSE);
 #endif
    if (sd->calc_job) ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, sd);
@@ -6894,7 +6824,6 @@ elm_genlist_item_select_mode_set(Elm_Object_Item *item,
    Elm_Gen_Item *it = (Elm_Gen_Item *)item;
 
    ELM_GENLIST_ITEM_CHECK_OR_RETURN(item);
-   if (!it) return;
    if (mode >= ELM_OBJECT_SELECT_MODE_MAX)
      return;
    if (it->select_mode != mode)
@@ -6933,8 +6862,6 @@ elm_genlist_item_select_mode_get(const Elm_Object_Item *item)
 
    ELM_GENLIST_ITEM_CHECK_OR_RETURN(item, ELM_OBJECT_SELECT_MODE_MAX);
 
-   if (!it) return ELM_OBJECT_SELECT_MODE_MAX;
-
    return it->select_mode;
 }
 
@@ -7024,7 +6951,11 @@ _elm_genlist_proxy_item_new(const Elm_Object_Item *item)
 
    pi->proxy = evas_object_image_filled_add
       (evas_object_evas_get(ELM_WIDGET_DATA(GL_IT(it)->wsd)->obj));
-   if (!pi->proxy) return EINA_FALSE;
+   if (!pi->proxy)
+     {
+        free(pi);
+        return NULL;
+     }
    evas_object_clip_set(pi->proxy, evas_object_clip_get(GL_IT(it)->wsd->pan_obj));
    evas_object_smart_member_add(pi->proxy, GL_IT(it)->wsd->pan_obj);
    evas_object_hide(pi->proxy);
@@ -7406,7 +7337,8 @@ _item_fx_done(Elm_Transit_Effect *data, Elm_Transit *transit __UNUSED__)
    Elm_Gen_FX_Item *fx_done_it = data;
    Elm_Genlist_Smart_Data *sd = GL_IT(fx_done_it->it)->wsd;
 
-   if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+   if (!fx_done_it) return;
+   if ((!fx_done_it->it) || (!sd)) return;
 
    evas_object_image_source_visible_set(fx_done_it->proxy, EINA_TRUE);
    evas_object_lower(fx_done_it->proxy);
@@ -7429,7 +7361,8 @@ _item_fx_del_cb(void *data, Elm_Transit *transit __UNUSED__)
    Eina_List *l;
    Elm_Genlist_Smart_Data *sd = GL_IT(fx_done_it->it)->wsd;
 
-   if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+   if (!fx_done_it) return;
+   if ((!fx_done_it->it) || (!sd)) return;
 
    sd->fx_items = eina_list_remove(sd->fx_items, fx_done_it);
    GL_IT(fx_done_it->it)->fi = NULL;
@@ -7536,7 +7469,7 @@ _elm_genlist_fx_play(Evas_Object *obj)
    _elm_genlist_fx_items_make(obj);
    if (!eina_list_count(sd->fx_items) || (sd->queue))
      {
-        _elm_genlist_fx_clear(obj);
+        _elm_genlist_fx_clear(obj, EINA_TRUE);
         return;
      }
 
@@ -7595,11 +7528,16 @@ _elm_genlist_fx_play(Evas_Object *obj)
           {
              elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
              elm_transit_effect_color_add(fi->trans, 0, 0, 0, 0, 255, 255, 255, 255);
+             if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+               elm_transit_effect_zoom_add(fi->trans, 0.8, 1.0);
           }
         else if (fi->type == ELM_GEN_ITEM_FX_TYPE_DEL)
           {
+             _item_unhighlight(fi->it);
              elm_transit_effect_translation_add(fi->trans, fi->from.x, fi->from.y, fi->to.x, fi->to.y);
              elm_transit_effect_color_add(fi->trans, 255, 255, 255, 255, 0, 0, 0, 0);
+             if ((!sd->pinch_zoom_mode) && (!sd->expanded_item))
+               elm_transit_effect_zoom_add(fi->trans, 1.0, 0.8);
           }
         elm_transit_effect_add(fi->trans, _item_fx_op, fi, _item_fx_done);
         elm_transit_del_cb_set(fi->trans, _item_fx_del_cb, fi);
@@ -7622,7 +7560,8 @@ elm_genlist_pinch_zoom_mode_set(Evas_Object *obj, Elm_Gen_Pinch_Zoom_Mode mode)
    Elm_Gen_Item *it;
    Eina_Bool done = EINA_FALSE;
 
-   if ((sd->queue) || (!sd->rendered) || (sd->queue_idle_enterer)) return EINA_FALSE;
+   if ((sd->queue) || (!sd->rendered) 
+       || (sd->queue_idle_enterer) || (!sd->fx_mode)) return EINA_FALSE;
 
    EINA_INLIST_FOREACH(sd->blocks, itb)
      {