From 3dc73cfcdb4fb6638cba2c5e0c97c5729a55f39b Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Tue, 6 Jan 2015 20:17:03 +0900 Subject: [PATCH] genlist: refactor code. select/unselect items by using common select function. --- src/lib/elm_genlist.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index f9b4b5380..fbfbeb4b8 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -5705,20 +5705,29 @@ _item_select(Elm_Gen_Item *it) ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd); Elm_Object_Item *eo_it = EO_OBJ(it); + if (eo_do(eo_it, elm_wdg_item_disabled_get())) return; + if (_is_no_select(it) || (it->generation < sd->generation) || (it->decorate_it_set)) return; + if (!sd->multi) + { + const Eina_List *l, *ll; + Elm_Gen_Item *it2; + EINA_LIST_FOREACH_SAFE(sd->selected, l, ll, it2) + { + if (it2 != it) _item_unselect(it2); + } + } + if (!it->selected) { it->selected = EINA_TRUE; sd->selected = eina_list_append(sd->selected, eo_it); } - else if ((sd->select_mode != ELM_OBJECT_SELECT_MODE_ALWAYS) && - (it->select_mode != ELM_OBJECT_SELECT_MODE_ALWAYS)) - return; evas_object_ref(obj); it->walking++; @@ -6531,31 +6540,14 @@ _elm_genlist_item_selected_set(Eo *eo_item EINA_UNUSED, Elm_Gen_Item *it, ELM_GENLIST_ITEM_CHECK_OR_RETURN(it); ELM_GENLIST_DATA_GET_FROM_ITEM(it, sd); - if ((it->generation < sd->generation) || eo_do(EO_OBJ(it), elm_wdg_item_disabled_get())) - return; + if ((it->generation < sd->generation) || + eo_do(EO_OBJ(it), elm_wdg_item_disabled_get())) return; + selected = !!selected; if (it->selected == selected) return; - if (selected) - { - if (!sd->multi) - { - while (sd->selected) - { - Elm_Object_Item *eo_sel = sd->selected->data; - ELM_GENLIST_ITEM_DATA_GET(eo_sel, sel); - if (it->unhighlight_cb) - it->unhighlight_cb(sel); - it->unsel_cb(sel); - } - } - it->highlight_cb(it); - it->sel_cb(it); - - return; - } - if (it->unhighlight_cb) it->unhighlight_cb(it); - it->unsel_cb(it); + if (selected) _item_select(it); + else _item_unselect(it); } EOLIAN static Eina_Bool -- 2.34.1