From cd93594a7b043b19dd0409d9b0ff79661244db9f Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Fri, 11 Sep 2015 20:10:55 +0900 Subject: [PATCH] listmgr: add focus handling for UP key on view button Change-Id: I71c2bffbce9b747b8baa71047d06b6bd9236128f Signed-off-by: Jehun Lim --- src/util/listmgr.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 9d2ac9d..30b23d1 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -57,6 +57,8 @@ struct listmgr { Eina_Bool focus_state; }; +Elm_Object_Item *_get_nearest_grid_item(struct listmgr *); + static void _index_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei) { Evas_Object *grid; @@ -86,6 +88,7 @@ static void _view_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei) { Evas_Object *play_info; Evas_Event_Key_Down *ev; + Elm_Object_Item *it; struct listmgr *lmgr; if (!data || !ei) @@ -104,8 +107,13 @@ static void _view_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei) play_info = elm_object_part_content_get(lmgr->focused, PART_ITEM_CONTENT); elm_object_focus_set(play_info, EINA_TRUE); - } else - elm_object_item_focus_set(lmgr->focused_it, EINA_TRUE); + } else { + it = lmgr->focused_it; + if (!it) + it = _get_nearest_grid_item(lmgr); + + elm_object_item_focus_set(it, EINA_TRUE); + } } } @@ -508,6 +516,39 @@ Elm_Object_Item *_get_grid_item(Evas_Object *grid, const char *id) return NULL; } +Elm_Object_Item *_get_nearest_grid_item(struct listmgr *lmgr) +{ + Evas_Object *ly, *grid; + Elm_Object_Item *it; + struct grid_data *gdata; + int cnt; + + ly = _get_box_first_item(lmgr->box); + if (!ly) { + _ERR("failed to get box first item"); + return NULL; + } + + grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT); + if (!grid) { + _ERR("failed to get grid object"); + return NULL; + } + + gdata = lmgr->data->gdata; + + /* find last item in first column */ + cnt = elm_gengrid_items_count(grid); + if (cnt > gdata->item_num) + cnt = gdata->item_num; + + it = elm_gengrid_first_item_get(grid); + while (--cnt) + it = elm_gengrid_item_next_get(it); + + return it; +} + void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state) { if (!lmgr) { @@ -662,6 +703,8 @@ void listmgr_clear_content_list(struct listmgr *lmgr) } eina_list_free(list); + + lmgr->focused_it = NULL; } bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, @@ -714,6 +757,8 @@ bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, elm_object_focus_allow_set(lmgr->scr, EINA_TRUE); + elm_scroller_region_show(lmgr->scr, 0, 0, 0, 0); + return true; } -- 2.7.4