jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=db5dd5f7d3fa532c68eb57090eebd6e4f0c339cb
commit db5dd5f7d3fa532c68eb57090eebd6e4f0c339cb Author: Daniel Zaoui <[email protected]> Date: Sat Nov 22 09:09:11 2014 +0200 Genlist: Fix API return value. elm_genlist_item_subitems_get has to return a list of Elm_Object_Item. Because of the porting of the genlist item to Eo, this function returns a list of Elm_Gen_Item. Thanks to zmike and seoz for catching this. Fixes T1859 --- src/lib/elm_genlist.c | 95 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 38 deletions(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index f1a1fdf..4cd9c22 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -818,28 +818,30 @@ _elm_genlist_elm_layout_sizing_eval(Eo *obj, Elm_Genlist_Data *sd) } static void -_item_contract_emit(Elm_Gen_Item *it) +_item_contract_emit(Elm_Object_Item *eo_it) { - Elm_Gen_Item *it2; + ELM_GENLIST_ITEM_DATA_GET(eo_it, it); + Elm_Object_Item *eo_it2; Eina_List *l; edje_object_signal_emit(VIEW(it), "elm,state,contract_flip", ""); // XXX: for compat edje_object_signal_emit(VIEW(it), "elm,state,contract_flip", "elm"); it->item->tree_effect_finished = EINA_FALSE; - EINA_LIST_FOREACH(it->item->items, l, it2) - if (it2) _item_contract_emit(it2); + EINA_LIST_FOREACH(it->item->items, l, eo_it2) + if (eo_it2) _item_contract_emit(eo_it2); } static int _item_tree_effect_before(Elm_Gen_Item *it) { - Elm_Gen_Item *it2; + Elm_Object_Item *eo_it2; Eina_List *l; ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd); - EINA_LIST_FOREACH(it->item->items, l, it2) + EINA_LIST_FOREACH(it->item->items, l, eo_it2) { + ELM_GENLIST_ITEM_DATA_GET(eo_it2, it2); if (it2->parent && (it == it2->parent)) { if (!it2->realized) @@ -852,7 +854,7 @@ _item_tree_effect_before(Elm_Gen_Item *it) } else if (sd->move_effect_mode == ELM_GENLIST_TREE_EFFECT_CONTRACT) - _item_contract_emit(it2); + _item_contract_emit(eo_it2); } } return ECORE_CALLBACK_CANCEL; @@ -940,26 +942,27 @@ static void _item_sub_items_clear(Elm_Gen_Item *it) { Eina_List *tl = NULL, *l; - Elm_Gen_Item *it2; + Elm_Object_Item *eo_it2; ELM_GENLIST_ITEM_CHECK_OR_RETURN(it); - EINA_LIST_FOREACH(it->item->items, l, it2) - tl = eina_list_append(tl, it2); - EINA_LIST_FREE(tl, it2) - eo_do(EO_OBJ(it2), elm_wdg_item_del()); + EINA_LIST_FOREACH(it->item->items, l, eo_it2) + tl = eina_list_append(tl, eo_it2); + EINA_LIST_FREE(tl, eo_it2) + eo_do(eo_it2, elm_wdg_item_del()); } static void _item_auto_scroll(Elm_Genlist_Data *sd) { - Elm_Gen_Item *tmp_item = NULL; + Elm_Object_Item *eo_tmp_item = NULL; if ((sd->expanded_item) && (sd->auto_scroll_enabled)) { - tmp_item = eina_list_data_get + eo_tmp_item = eina_list_data_get (eina_list_last(sd->expanded_item->item->items)); - if (!tmp_item) return; + if (!eo_tmp_item) return; + ELM_GENLIST_ITEM_DATA_GET(eo_tmp_item, tmp_item); sd->show_item = tmp_item; sd->bring_in = EINA_TRUE; sd->scroll_to_type = ELM_GENLIST_ITEM_SCROLLTO_IN; @@ -976,7 +979,7 @@ _item_auto_scroll(Elm_Genlist_Data *sd) static void _item_tree_effect_finish(Elm_Genlist_Data *sd) { - Elm_Gen_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; const Eina_List *l; if (sd->tree_effect_animator) @@ -984,8 +987,9 @@ _item_tree_effect_finish(Elm_Genlist_Data *sd) if (sd->move_effect_mode == ELM_GENLIST_TREE_EFFECT_CONTRACT) _item_sub_items_clear(sd->expanded_item); - EINA_LIST_FOREACH(sd->expanded_item->item->items, l, it) + EINA_LIST_FOREACH(sd->expanded_item->item->items, l, eo_it) { + ELM_GENLIST_ITEM_DATA_GET(eo_it, it); it->item->tree_effect_finished = EINA_TRUE; it->item->old_scrl_y = it->item->scrl_y; if (GL_IT(it)->wsd->move_effect_mode == @@ -1087,7 +1091,7 @@ _elm_genlist_item_position_state_update(Elm_Gen_Item *it) if (it->deco_all_view) edje_object_signal_emit(it->deco_all_view, "elm,state,group,first", "elm"); } - else if (it == eina_list_data_get(eina_list_last(it->parent->item->items))) + else if (EO_OBJ(it) == eina_list_data_get(eina_list_last(it->parent->item->items))) { edje_object_signal_emit(VIEW(it), "elm,state,group,last", "elm"); if (it->deco_all_view) @@ -3267,7 +3271,7 @@ _item_block_del(Elm_Gen_Item *it) itbn = (Item_Block *)(il->next); if (it->parent) it->parent->item->items = - eina_list_remove(it->parent->item->items, it); + eina_list_remove(it->parent->item->items, EO_OBJ(it)); else { _item_block_position_update(il->next, itb->position); @@ -3457,7 +3461,7 @@ _item_del(Elm_Gen_Item *it) if (sd->expanded_next_item == it) sd->expanded_next_item = NULL; if (sd->move_items) sd->move_items = eina_list_remove(sd->move_items, it); if (it->parent) - it->parent->item->items = eina_list_remove(it->parent->item->items, it); + it->parent->item->items = eina_list_remove(it->parent->item->items, EO_OBJ(it)); ELM_SAFE_FREE(it->item->swipe_timer, ecore_timer_del); _elm_genlist_item_del_serious(it); elm_genlist_item_class_unref((Elm_Genlist_Item_Class *)it->itc); @@ -5720,7 +5724,7 @@ _elm_genlist_item_elm_widget_item_del_pre(Eo *eo_it, Elm_Gen_Item *it) if (it->parent) { it->parent->item->items = - eina_list_remove(it->parent->item->items, it); + eina_list_remove(it->parent->item->items, eo_it); it->parent = NULL; } return EINA_FALSE; @@ -5860,6 +5864,17 @@ _elm_genlist_item_list_compare(const void *data, return GL_IT(it)->wsd->item_compare_cb(EO_OBJ(it), EO_OBJ(item1)); } +static int +_elm_genlist_eo_item_list_compare(const void *data, + const void *data1) +{ + const Elm_Object_Item *eo_it = data; + const Elm_Object_Item *eo_item1 = data1; + ELM_GENLIST_ITEM_DATA_GET(eo_it, it); + + return GL_IT(it)->wsd->item_compare_cb(eo_it, eo_item1); +} + EOLIAN static unsigned int _elm_genlist_items_count(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd) { @@ -5870,12 +5885,13 @@ static Eina_List * _list_last_recursive(Eina_List *list) { Eina_List *ll, *ll2; - Elm_Gen_Item *it2; + Elm_Object_Item *eo_it2; ll = eina_list_last(list); if (!ll) return NULL; - it2 = ll->data; + eo_it2 = ll->data; + ELM_GENLIST_ITEM_DATA_GET(eo_it2, it2); if (it2->item->items) { @@ -5907,13 +5923,14 @@ _elm_genlist_item_append(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const Elm_Ge } else { - Elm_Gen_Item *it2 = NULL; + Elm_Object_Item *eo_it2 = NULL; Eina_List *ll = _list_last_recursive(it->parent->item->items); - if (ll) it2 = ll->data; + if (ll) eo_it2 = ll->data; it->parent->item->items = - eina_list_append(it->parent->item->items, it); - if (!it2) it2 = it->parent; + eina_list_append(it->parent->item->items, EO_OBJ(it)); + if (!eo_it2) eo_it2 = EO_OBJ(it->parent); + ELM_GENLIST_ITEM_DATA_GET(eo_it2, it2); sd->items = eina_inlist_append_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(it2)); it->item->rel = it2; @@ -5943,13 +5960,14 @@ _elm_genlist_item_prepend(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const Elm_G } else { - Elm_Gen_Item *it2 = NULL; + Elm_Object_Item *eo_it2 = NULL; Eina_List *ll = it->parent->item->items; - if (ll) it2 = ll->data; + if (ll) eo_it2 = ll->data; it->parent->item->items = - eina_list_prepend(it->parent->item->items, it); - if (!it2) it2 = it->parent; + eina_list_prepend(it->parent->item->items, EO_OBJ(it)); + if (!eo_it2) eo_it2 = EO_OBJ(it->parent); + ELM_GENLIST_ITEM_DATA_GET(eo_it2, it2); sd->items = eina_inlist_prepend_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(it2)); it->item->rel = it2; @@ -5986,7 +6004,7 @@ _elm_genlist_item_insert_after(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const else { it->parent->item->items = - eina_list_append_relative(it->parent->item->items, it, after); + eina_list_append_relative(it->parent->item->items, EO_OBJ(it), eo_after); } sd->items = eina_inlist_append_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(after)); @@ -6024,7 +6042,7 @@ _elm_genlist_item_insert_before(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const else { it->parent->item->items = - eina_list_prepend_relative(it->parent->item->items, it, before); + eina_list_prepend_relative(it->parent->item->items, EO_OBJ(it), eo_before); } sd->items = eina_inlist_prepend_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(before)); @@ -6045,6 +6063,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const it = _elm_genlist_item_new (sd, itc, data, parent, type, func, func_data); if (!it) return NULL; + Elm_Object_Item *eo_it = EO_OBJ(it); sd->item_compare_cb = comp; @@ -6054,7 +6073,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const int cmp_result; l = eina_list_search_sorted_near_list - (it->parent->item->items, _elm_genlist_item_list_compare, it, + (it->parent->item->items, _elm_genlist_eo_item_list_compare, eo_it, &cmp_result); if (l) @@ -6064,7 +6083,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const if (cmp_result >= 0) { it->parent->item->items = eina_list_prepend_relative_list - (it->parent->item->items, it, l); + (it->parent->item->items, eo_it, l); sd->items = eina_inlist_prepend_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(rel)); it->item->before = EINA_TRUE; @@ -6072,7 +6091,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const else if (cmp_result < 0) { it->parent->item->items = eina_list_append_relative_list - (it->parent->item->items, it, l); + (it->parent->item->items, eo_it, l); sd->items = eina_inlist_append_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(rel)); it->item->before = EINA_FALSE; @@ -6084,7 +6103,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const // ignoring the comparison it->parent->item->items = eina_list_prepend_relative_list - (it->parent->item->items, it, l); + (it->parent->item->items, eo_it, l); sd->items = eina_inlist_prepend_relative (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(rel)); it->item->before = EINA_FALSE; @@ -6126,7 +6145,7 @@ _elm_genlist_item_sorted_insert(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, const _item_queue(sd, it, _elm_genlist_item_list_compare); - return EO_OBJ(it); + return eo_it; } EOLIAN static void --
