From a45e3f59036b47fd99c661b09f047dbab33f7d43 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Sat, 8 Aug 2015 17:54:56 +0900 Subject: [PATCH] fix the focus problem Change-Id: I88bd4b429ef258057fc1bddb63d54235e8d3cfef Signed-off-by: Minkyu Kang --- include/util/listmgr.h | 2 ++ include/view.h | 2 +- src/layout/gallery.c | 5 ++--- src/layout/movie.c | 5 ++--- src/layout/music.c | 5 ++--- src/util/listmgr.c | 36 ++++++++++++++++++++++-------------- src/view/base.c | 34 ++++++++++------------------------ 7 files changed, 41 insertions(+), 48 deletions(-) diff --git a/include/util/listmgr.h b/include/util/listmgr.h index 48f21fe..1f12061 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -57,4 +57,6 @@ bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info); bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update); bool listmgr_focus_play_info(struct listmgr *lmgr); +void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state); + #endif /* __AIR_MEDIAHUB_LISTMGR_H__ */ diff --git a/include/view.h b/include/view.h index 30a8a47..ebb5a0e 100644 --- a/include/view.h +++ b/include/view.h @@ -40,7 +40,7 @@ enum update_type { UPDATE_PLAYER, UPDATE_FAVORITE, UPDATE_RECENT, - UPDATE_RESUME, + UPDATE_FOCUS_STATE, }; #endif /* __AIR_MEDIAHUB_VIEW_H__ */ diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 28db18e..c6a4086 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -450,9 +450,8 @@ static void _update(void *layout_data, int update_type, void *data) _update_content_list(priv); _recent_item_selected(priv, data); break; - case UPDATE_RESUME: - listmgr_focus_content_list(priv->listmgr, - priv->cur_index, false); + case UPDATE_FOCUS_STATE: + listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; default: break; diff --git a/src/layout/movie.c b/src/layout/movie.c index 28f49f4..b863c90 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -699,9 +699,8 @@ static void _update(void *layout_data, int update_type, void *data) _update_content_list(priv); _recent_item_selected(priv, data); break; - case UPDATE_RESUME: - listmgr_focus_content_list(priv->listmgr, - priv->cur_index, false); + case UPDATE_FOCUS_STATE: + listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; default: break; diff --git a/src/layout/music.c b/src/layout/music.c index bbf637a..30ecc98 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -628,9 +628,8 @@ static void _update(void *layout_data, int update_type, void *data) _update_content_list(priv); _recent_item_selected(priv, data); break; - case UPDATE_RESUME: - listmgr_focus_content_list(priv->listmgr, - priv->cur_index, false); + case UPDATE_FOCUS_STATE: + listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; default: break; diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 84eb251..0c4269b 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -50,7 +50,7 @@ struct listmgr { struct listmgr_data *data; Eina_Bool show_play_info; - Eina_Bool scr_focus; + Eina_Bool focus_state; }; static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, @@ -66,9 +66,9 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, switch (id) { case LISTMGR_INDEX: if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE)) + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { elm_object_focus_next(obj, ELM_FOCUS_UP); - else if (!strcmp(ev->keyname, KEY_DOWN)) { + } else if (!strcmp(ev->keyname, KEY_DOWN)) { Evas_Object *grid; Elm_Object_Item *it; @@ -109,7 +109,7 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, case LISTMGR_INDEX: case LISTMGR_PLAY_INFO: if (!elm_object_focus_get(obj)) { - lmgr->scr_focus = EINA_FALSE; + lmgr->focus_state = EINA_TRUE; elm_object_focus_set(obj, EINA_TRUE); } @@ -122,9 +122,8 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, return; if (!elm_object_item_focus_get(it)) { - lmgr->scr_focus = EINA_FALSE; + lmgr->focus_state = EINA_TRUE; elm_object_item_focus_set(it, EINA_TRUE); - lmgr->scr_focus = EINA_TRUE; } break; @@ -160,7 +159,7 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, switch (id) { case LISTMGR_SCROLLER: - if (!lmgr->scr_focus) + if (lmgr->focus_state) break; btn = elm_object_part_content_get(lmgr->focused, @@ -170,15 +169,14 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, return; } + lmgr->focus_state = EINA_TRUE; elm_object_focus_set(btn, EINA_TRUE); break; case LISTMGR_INDEX: case LISTMGR_PLAY_INFO: case LISTMGR_GRID: - lmgr->focused = elm_object_parent_widget_get(obj); - lmgr->scr_focus = EINA_TRUE; - + lmgr->focused = elm_object_parent_widget_get(obj); elm_object_signal_emit(lmgr->data->menu_btn, SIG_BTN_SELECTED, SIG_SOURCE_SRC); break; @@ -389,12 +387,22 @@ bool _focus_to_content(struct listmgr *lmgr, Evas_Object *base) return false; } - lmgr->scr_focus = EINA_FALSE; + lmgr->focus_state = EINA_TRUE; elm_object_focus_set(content, EINA_TRUE); return true; } +void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state) +{ + if (!lmgr) { + _ERR("failed to get listmgr"); + return; + } + + lmgr->focus_state = state; +} + bool listmgr_focus_play_info(struct listmgr *lmgr) { if (!lmgr) { @@ -456,7 +464,7 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update) elm_gengrid_item_bring_in(it, ELM_GENGRID_ITEM_SCROLLTO_MIDDLE); - lmgr->scr_focus = EINA_FALSE; + lmgr->focus_state = EINA_TRUE; elm_object_item_focus_set(it, EINA_TRUE); return true; @@ -620,9 +628,9 @@ struct listmgr *listmgr_create(Evas_Object *base, void *data) lmgr->base = base; lmgr->gmgr = gmgr; - lmgr->data = (struct listmgr_data *)data; + lmgr->data = data; lmgr->show_play_info = EINA_FALSE; - lmgr->scr_focus = EINA_TRUE; + lmgr->focus_state = EINA_FALSE; return lmgr; } diff --git a/src/view/base.c b/src/view/base.c index 928dde1..6f18cdd 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -124,13 +124,6 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, priv = data; - if (priv->focused_btn == obj) - return; - - if (priv->focused_btn) - elm_object_signal_emit(priv->focused_btn, SIG_BTN_UNSELECTED, - SIG_SOURCE_SRC); - for (i = 0; i < E_LAYOUT_MAX; i++) { if (priv->btn[i] == obj) break; @@ -139,6 +132,16 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, if (i == E_LAYOUT_MAX) return; + layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, + UPDATE_FOCUS_STATE, NULL); + + if (priv->focused_btn == obj) + return; + + if (priv->focused_btn) + elm_object_signal_emit(priv->focused_btn, SIG_BTN_UNSELECTED, + SIG_SOURCE_SRC); + _set_current_layout(priv, i); layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, @@ -594,22 +597,6 @@ static void _pause(void *view_data) viewmgr_update_view(VIEW_MPLAYER, UPDATE_PLAYER, NULL); } -static void _resume(void *view_data) -{ - struct _priv *priv; - - if (!view_data) { - _ERR("failed to get view data"); - return; - } - - priv = view_data; - - layoutmgr_update_layout(priv->lmgr, - g_menu_item[priv->current_layout].layout_id, - UPDATE_RESUME, NULL); -} - static void _destroy(void *view_data) { struct _priv *priv; @@ -648,7 +635,6 @@ static view_class _vclass = { .hide = _hide, .update = _update, .pause = _pause, - .resume = _resume, .destroy = _destroy, }; -- 2.7.4