diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-09-25 11:13:25 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-09-25 11:15:06 +0900 |
commit | b5da373f1c974571b30f12ac2102db4ddf1f3d72 (patch) | |
tree | 4886d44e9e5d46cc6c954fab5ccfefe4e246d278 | |
parent | 76241dd74e1971d7b9f06160d369751079ba9baf (diff) | |
download | air_mediahub-b5da373f1c974571b30f12ac2102db4ddf1f3d72.tar.gz air_mediahub-b5da373f1c974571b30f12ac2102db4ddf1f3d72.tar.bz2 air_mediahub-b5da373f1c974571b30f12ac2102db4ddf1f3d72.zip |
detail: add BACK key handling to set focus
Change-Id: Idc6b61ba3ed3b6f0fc60beabee4d0f2df141db53
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/view.h | 1 | ||||
-rw-r--r-- | src/layout/movie.c | 3 | ||||
-rw-r--r-- | src/layout/music.c | 3 | ||||
-rw-r--r-- | src/util/listmgr.c | 65 | ||||
-rw-r--r-- | src/view/base.c | 1 | ||||
-rw-r--r-- | src/view/detail.c | 1 |
6 files changed, 37 insertions, 37 deletions
diff --git a/include/view.h b/include/view.h index 7422bac..7d52512 100644 --- a/include/view.h +++ b/include/view.h @@ -47,6 +47,7 @@ enum update_type { UPDATE_CONTENT = 0, UPDATE_CONTENT_ITEM, UPDATE_FOCUS, + UPDATE_BACK, UPDATE_PLAY_INFO, UPDATE_PLAYER, UPDATE_FAVORITE, diff --git a/src/layout/movie.c b/src/layout/movie.c index e145cd5..9267939 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -648,6 +648,9 @@ static void _update(void *layout_data, int update_type, void *data) listmgr_focus_play_info(priv->listmgr); _update_recent_item(priv, vdata->id); break; + case UPDATE_BACK: + listmgr_focus_content_list(priv->listmgr, NULL); + break; case UPDATE_RECENT: if (!data) { _ERR("invalid argument"); diff --git a/src/layout/music.c b/src/layout/music.c index 2ab37eb..19a0fce 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -624,6 +624,9 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_FOCUS: listmgr_focus_play_info(priv->listmgr); break; + case UPDATE_BACK: + listmgr_focus_content_list(priv->listmgr, NULL); + break; case UPDATE_RECENT: if (!data) { _ERR("invalid argument"); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 0f80bb8..6d9df60 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -48,7 +48,6 @@ struct listmgr { Evas_Object *focused; Elm_Object_Item *focused_it; - Elm_Object_Item *selected_it; struct gridmgr *gmgr; struct listmgr_data *data; @@ -261,7 +260,7 @@ static void _grid_selected(void *data) gdata = lmgr->data->gdata; if (gdata->selected_cb) - gdata->selected_cb(gdata->data, lmgr->selected_it); + gdata->selected_cb(gdata->data, lmgr->focused_it); } static void _grid_selected_cb(int id, void *data, Evas_Object *obj, @@ -274,8 +273,6 @@ static void _grid_selected_cb(int id, void *data, Evas_Object *obj, lmgr = data; - lmgr->selected_it = it; - ecore_job_add(_grid_selected, lmgr); } @@ -493,24 +490,36 @@ bool _focus_to_content(struct listmgr *lmgr, Evas_Object *base) return true; } -Elm_Object_Item *_get_grid_item(Evas_Object *grid, const char *id) +Elm_Object_Item *_get_grid_item(struct listmgr *lmgr, const char *id) { + Eina_List *item, *l; + Evas_Object *ly, *grid; Elm_Object_Item *it; app_media *am; app_media_info *mi; - for (it = elm_gengrid_first_item_get(grid); it; - it = elm_gengrid_item_next_get(it)) { - am = elm_object_item_data_get(it); - if (!am) - continue; + item = elm_box_children_get(lmgr->box); + + EINA_LIST_FOREACH(item, l, ly) { + grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT); + if (!grid) { + _ERR("failed to get grid object"); + return false; + } + + for (it = elm_gengrid_first_item_get(grid); it; + it = elm_gengrid_item_next_get(it)) { + am = elm_object_item_data_get(it); + if (!am) + continue; - mi = app_media_get_info(am); - if (!mi) - continue; + mi = app_media_get_info(am); + if (!mi) + continue; - if (!strcmp(id, mi->media_id)) - return it; + if (!strcmp(id, mi->media_id)) + return it; + } } return NULL; @@ -576,8 +585,6 @@ bool listmgr_focus_play_info(struct listmgr *lmgr) bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id) { - Eina_List *item, *l; - Evas_Object *ly, *grid; Elm_Object_Item *it; if (!lmgr) { @@ -585,26 +592,10 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id) return false; } - if (!id) { - _ERR("invalid argument"); - return false; - } - - item = elm_box_children_get(lmgr->box); - - grid = NULL; - it = NULL; - EINA_LIST_FOREACH(item, l, ly) { - grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT); - if (!grid) { - _ERR("failed to get grid object"); - return false; - } - - it = _get_grid_item(grid, id); - if (it) - break; - } + if (id) + it = _get_grid_item(lmgr, id); + else + it = lmgr->focused_it; if (!it) { _ERR("failed to get current grid item"); diff --git a/src/view/base.c b/src/view/base.c index 052e26b..b61387d 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -796,6 +796,7 @@ static void _update(void *view_data, int update_type, void *data) update_type, vdata); break; case UPDATE_CONTENT_ITEM: + case UPDATE_BACK: layoutmgr_update_layout(priv->lmgr, g_menu_item[priv->current_layout].layout_id, update_type, NULL); diff --git a/src/view/detail.c b/src/view/detail.c index 5f20ecd..ce28fdb 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -89,6 +89,7 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC)) { + viewmgr_update_view(VIEW_BASE, UPDATE_BACK, NULL); viewmgr_pop_view(); } } |