seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=e97b9a790f21b0618c3696cfbe880b29c8edf7b8
commit e97b9a790f21b0618c3696cfbe880b29c8edf7b8 Author: Daniel Juyung Seo <[email protected]> Date: Mon Mar 24 02:07:41 2014 +0900 genlist: Check disabled status of an item in nearest visible item. Also added a test for it. --- src/bin/test_genlist.c | 29 ++++++++++++++++++++--------- src/lib/elm_genlist.c | 19 ++++++++++++++----- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c index 0736b7b..10dbd94 100644 --- a/src/bin/test_genlist.c +++ b/src/bin/test_genlist.c @@ -3779,6 +3779,13 @@ _sel_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, } static void +_dis_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + elm_object_item_disabled_set(data, EINA_TRUE); +} + +static void _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -3791,10 +3798,10 @@ test_genlist_focus(void *data EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *win, *bx, *bx2, *gl, *btn, *fr; - Evas_Object *bx_opt, *chk, *bx_btn, *btn_focus, *btn_sel; + Evas_Object *bx_opt, *chk, *bx_btn, *btn_focus, *btn_sel, *btn_dis; Evas_Object *bx_mv, *rd, *rdg; unsigned lhand, rhand; - Elm_Object_Item *it = NULL, *it_2 = NULL; + Elm_Object_Item *it = NULL, *it_0 = NULL, *it_2 = NULL; win = elm_win_util_standard_add("genlist-focus", "Genlist Focus"); elm_win_autodel_set(win, EINA_TRUE); @@ -3878,8 +3885,9 @@ test_genlist_focus(void *data EINA_UNUSED, for (rhand = 0; rhand < _gl_focus_objects; rhand++) { unsigned digit1 = lhand * 10 + rhand; - elm_genlist_item_append(gl, itc1, (void*)(uintptr_t)digit1, - NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + it = elm_genlist_item_append(gl, itc1, (void*)(uintptr_t)digit1, + NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + if (!it_0) it_0 = it; unsigned digit2 = (_gl_focus_objects - lhand -1) * 10 + (_gl_focus_objects - rhand -1); @@ -3978,11 +3986,6 @@ test_genlist_focus(void *data EINA_UNUSED, elm_object_text_set(fr, "Focus/Selection"); evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); - // Focus/Selection - fr = elm_frame_add(bx); - elm_object_text_set(fr, "Focus/Selection"); - evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_box_pack_end(bx, fr); evas_object_show(fr); @@ -4004,8 +4007,16 @@ test_genlist_focus(void *data EINA_UNUSED, elm_box_pack_end(bx_btn, btn_sel); evas_object_show(btn_sel); + btn_dis = elm_button_add(bx_btn); + elm_object_text_set(btn_dis, "Disable 1st Item."); + evas_object_size_hint_weight_set(btn_dis, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn_dis, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx_btn, btn_dis); + evas_object_show(btn_dis); + evas_object_smart_callback_add(btn_focus, "clicked", _focus_btn_cb, it_2); evas_object_smart_callback_add(btn_sel, "clicked", _sel_btn_cb, it_2); + evas_object_smart_callback_add(btn_dis, "clicked", _dis_btn_cb, it_0); evas_object_resize(win, 420, 600); evas_object_show(win); diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 9df255e..752aa75 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -2856,22 +2856,30 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) Eina_List *item_list = NULL, *l = NULL; Elm_Object_Item *item = NULL; ELM_GENLIST_DATA_GET(obj, sd); + Eina_Bool search_next = EINA_FALSE; if (!it) return NULL; evas_object_geometry_get(sd->pan_obj, &vx, &vy, &vw, &vh); evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih); // FIXME: check if the item is realized or not + item_list = elm_genlist_realized_items_get(obj); + if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih)) - return it; + { + if (!elm_object_item_disabled_get(it)) + return it; + else + search_next = EINA_TRUE; + } - item_list = elm_genlist_realized_items_get(obj); - if (iy < vy) + if ((iy < vy) || search_next) { EINA_LIST_FOREACH(item_list, l, item) { evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); - if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch)) + if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && + !elm_object_item_disabled_get(item)) return item; } } @@ -2880,7 +2888,8 @@ _elm_genlist_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) EINA_LIST_REVERSE_FOREACH(item_list, l, item) { evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); - if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch)) + if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && + !elm_object_item_disabled_get(item)) return item; } } --
