From e35de516b987c9b7605e9da0c170822757d891aa Mon Sep 17 00:00:00 2001 From: Daniel Juyung Seo Date: Tue, 5 Nov 2013 14:11:40 +0900 Subject: [PATCH] elm_list.c: Split _item_unselect() into _item_unhighlight() and _item_unselect(). --- legacy/elementary/src/lib/elm_list.c | 104 +++++++++++++++++++++------ 1 file changed, 83 insertions(+), 21 deletions(-) diff --git a/legacy/elementary/src/lib/elm_list.c b/legacy/elementary/src/lib/elm_list.c index 53fa83415e..4a4107c917 100644 --- a/legacy/elementary/src/lib/elm_list.c +++ b/legacy/elementary/src/lib/elm_list.c @@ -1015,24 +1015,21 @@ call: } static void -_item_unselect(Elm_List_Item *it) +_item_unhighlight(Elm_List_Item *it) { - Evas_Object *obj = WIDGET(it); - ELM_LIST_DATA_GET(obj, sd); + Evas_Object *obj; const char *stacking, *select_raise; ELM_LIST_ITEM_CHECK_OR_RETURN(it); - if (!it->highlighted) return; + obj = WIDGET(it); + ELM_LIST_DATA_GET(obj, sd); + + if ((!it->highlighted) || (it->base.disabled) || + (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) return; evas_object_ref(obj); _elm_list_walk(sd); - if (it->sd->focus_on_selection_enabled) - { - if (it->icon) elm_object_focus_set(it->icon, EINA_FALSE); - if (it->end) elm_object_focus_set(it->end, EINA_FALSE); - } - edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm"); evas_object_smart_callback_call(obj, SIG_UNHIGHLIGHTED, it); stacking = edje_object_data_get(VIEW(it), "stacking"); @@ -1043,6 +1040,32 @@ _item_unselect(Elm_List_Item *it) evas_object_lower(VIEW(it)); } it->highlighted = EINA_FALSE; + + _elm_list_unwalk(obj, sd); + evas_object_unref(obj); +} + +static void +_item_unselect(Elm_List_Item *it) +{ + Evas_Object *obj; + + ELM_LIST_ITEM_CHECK_OR_RETURN(it); + obj = WIDGET(it); + ELM_LIST_DATA_GET(obj, sd); + + if (it->base.disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) + return; + + evas_object_ref(obj); + _elm_list_walk(sd); + + if (it->sd->focus_on_selection_enabled) + { + if (it->icon) elm_object_focus_set(it->icon, EINA_FALSE); + if (it->end) elm_object_focus_set(it->end, EINA_FALSE); + } + if (it->selected) { it->selected = EINA_FALSE; @@ -1161,7 +1184,10 @@ _mouse_move_cb(void *data, sd->on_hold = EINA_TRUE; ELM_SAFE_FREE(it->long_timer, ecore_timer_del); if (!sd->was_selected) - _item_unselect(it); + { + _item_unhighlight(it); + _item_unselect(it); + } } if (sd->movements == ELM_LIST_SWIPE_MOVES) sd->swipe = EINA_TRUE; else @@ -1252,7 +1278,11 @@ _mouse_up_cb(void *data, } if (sd->longpressed) { - if (!sd->was_selected) _item_unselect(it); + if (!sd->was_selected) + { + _item_unhighlight(it); + _item_unselect(it); + } sd->was_selected = 0; return; } @@ -1271,14 +1301,21 @@ _mouse_up_cb(void *data, _item_highlight(it); _item_select(it); } - else _item_unselect(it); + else + { + _item_unhighlight(it); + _item_unselect(it); + } } else { if (!it->selected) { while (sd->selected) - _item_unselect(sd->selected->data); + { + _item_unhighlight(sd->selected->data); + _item_unselect(sd->selected->data); + } _item_highlight(it); _item_select(it); } @@ -1288,7 +1325,11 @@ _mouse_up_cb(void *data, Elm_List_Item *it2; EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, it2) - if (it2 != it) _item_unselect(it2); + if (it2 != it) + { + _item_unhighlight(it2); + _item_unselect(it2); + } _item_highlight(it); _item_select(it); } @@ -1437,7 +1478,11 @@ _item_del_pre_hook(Elm_Object_Item *it) ELM_LIST_DATA_GET(obj, sd); - if (item->selected) _item_unselect(item); + if (item->selected) + { + _item_unhighlight(item); + _item_unselect(item); + } if (sd->walking > 0) { @@ -1526,14 +1571,21 @@ _access_activate_cb(void *data __UNUSED__, _item_highlight(it); _item_select(it); } - else _item_unselect(it); + else + { + _item_unhighlight(it); + _item_unselect(it); + } } else { if (!it->selected) { while (sd->selected) - _item_unselect(sd->selected->data); + { + _item_unhighlight(sd->selected->data); + _item_unselect(sd->selected->data); + } _item_highlight(it); _item_select(it); } @@ -1543,7 +1595,11 @@ _access_activate_cb(void *data __UNUSED__, Elm_List_Item *it2; EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, it2) - if (it2 != it) _item_unselect(it2); + if (it2 != it) + { + _item_unhighlight(it2); + _item_unselect(it2); + } _item_highlight(it); _item_select(it); } @@ -2494,13 +2550,19 @@ elm_list_item_selected_set(Elm_Object_Item *it, if (!sd->multi) { while (sd->selected) - _item_unselect(sd->selected->data); + { + _item_unhighlight(sd->selected->data); + _item_unselect(sd->selected->data); + } } _item_highlight(item); _item_select(item); } else - _item_unselect(item); + { + _item_unhighlight(item); + _item_unselect(item); + } _elm_list_unwalk(obj, sd); evas_object_unref(obj);