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;
           }
      }

-- 


Reply via email to