Set focus after key event handling is finished 45/37145/2
authorKim Tae Soo <taesoo46.kim@samsung.com>
Fri, 20 Mar 2015 00:23:59 +0000 (09:23 +0900)
committerKim Tae Soo <taesoo46.kim@samsung.com>
Fri, 20 Mar 2015 00:27:37 +0000 (09:27 +0900)
Change-Id: I5f3cc3ad2a21949bac0c042be495c3de0286839e
Signed-off-by: Kim Tae Soo <taesoo46.kim@samsung.com>
include/album-layout.h
include/song-layout.h
src/views/album-layout.cpp
src/views/category-layout.cpp
src/views/song-layout.cpp

index 1b983cb..7901cf7 100644 (file)
@@ -28,6 +28,9 @@ private:
        struct SAlbumLayout *m;
 
 private:
+       static Eina_Bool sm_CbFocusIdler(void *dt);
+       void m_OnFocusIdler(void);
+
        static char *sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part);
        static Evas_Object *sm_CbGetGridItemContent(void *data, Evas_Object *obj, const char *part);
        static void sm_CbRemoveGridItem(void *data, Evas_Object *obj);
index 714e1d1..37a5f85 100644 (file)
@@ -26,6 +26,9 @@ private:
        struct SSongLayout *m;
 
 private:
+       static Eina_Bool sm_CbFocusIdler(void *dt);
+       void m_OnFocusIdler(void);
+
        static char *sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part);
        static Evas_Object *sm_CbGetListItemContent(void *data, Evas_Object *obj, const char *part);
        static void sm_CbRemoveListItem(void *data, Evas_Object *obj);
index 8fe0145..f1dbcb1 100644 (file)
@@ -73,6 +73,7 @@ struct SAlbumLayout {
        char *album_id;
        CAlbumSongsLayout *layoutAlbumSongs;
        SCallback callback;
+       Ecore_Idler *focusIdler;
 
        SAlbumLayout() {
                memset(this, 0, sizeof(SAlbumLayout));
@@ -83,6 +84,27 @@ struct SAlbumLayout {
 };
 
 
+Eina_Bool CAlbumLayout::sm_CbFocusIdler(void *dt)
+{
+       CAlbumLayout *root = (CAlbumLayout *)dt;
+
+       if (root)
+               root->m_OnFocusIdler();
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CAlbumLayout::m_OnFocusIdler(void)
+{
+       m->focusIdler = NULL;
+
+       ASSERT(m->focusedItem);
+       elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN);
+       elm_object_item_focus_set(m->focusedItem, EINA_TRUE);
+}
+
+
 char *CAlbumLayout::sm_CbGetGridItemText(void *data, Evas_Object *obj, const char *part)
 {
        SAlbumItemInfo *itinfo = (SAlbumItemInfo *)data;
@@ -563,10 +585,7 @@ void CAlbumLayout::Update(bool focusFlag)
 void CAlbumLayout::SetFocus(const char *btnStr)
 {
        ASSERT(m);
-       ASSERT(m->focusedItem);
-
-       elm_gengrid_item_show(m->focusedItem, ELM_GENGRID_ITEM_SCROLLTO_IN);
-       elm_object_item_focus_set(m->focusedItem, EINA_TRUE);
+       m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
 }
 
 
index fe23564..6041718 100644 (file)
@@ -150,16 +150,22 @@ void CCategoryLayout::m_OnFocusIdler(void)
                        elm_object_focus_set(m->def_foc_btn, EINA_TRUE);
        }
        else {
-               Evas_Object *focus = NULL;
+               if (t.depth == E_DEPTH_CATEGORY) {
+                       elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN);
+                       elm_object_item_focus_set(t.focused_item, EINA_TRUE);
+               }
+               else {
+                       Evas_Object *focus = NULL;
 
-               if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
-                       focus = m->addBtns[ABTN_PLAY];
-               else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
-                       focus = m->addBtns[ABTN_NEXT];
-               else // MUSIC_THIRD_BTN
-                       focus = m->addBtns[ABTN_LAST];
+                       if (!strcmp(m->focusBtnStr, MUSIC_FIRST_BTN))
+                               focus = m->addBtns[ABTN_PLAY];
+                       else if (!strcmp(m->focusBtnStr, MUSIC_SECOND_BTN))
+                               focus = m->addBtns[ABTN_NEXT];
+                       else // MUSIC_THIRD_BTN
+                               focus = m->addBtns[ABTN_LAST];
 
-               elm_object_focus_set(focus, EINA_TRUE);
+                       elm_object_focus_set(focus, EINA_TRUE);
+               }
        }
 }
 
@@ -1262,15 +1268,9 @@ void CCategoryLayout::SetFocus(const char *btnStr)
 {
        ASSERT(m);
 
-       if (t.depth == E_DEPTH_CATEGORY) {
-               elm_gengrid_item_show(t.focused_item, ELM_GENGRID_ITEM_SCROLLTO_IN);
-               elm_object_item_focus_set(t.focused_item, EINA_TRUE);
-       }
-       else {
-               m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT;
-               m->focusBtnStr = btnStr;
-               m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
-       }
+       m->idlerType = IDLER_TYPE_FOCUS_MOVE_BY_USER_INPUT;
+       m->focusBtnStr = btnStr;
+       m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
 }
 
 
index 3a322a0..8e776b5 100644 (file)
@@ -61,6 +61,7 @@ struct SSongLayout {
        CViewMgr* vmgr;
        SContentInfo *ctxtinfo;
        char *uri;
+       Ecore_Idler *focusIdler;
 
        SSongLayout() {
                memset(this, 0, sizeof(SSongLayout));
@@ -71,6 +72,29 @@ struct SSongLayout {
 };
 
 
+Eina_Bool CSongLayout::sm_CbFocusIdler(void *dt)
+{
+       CSongLayout *root = (CSongLayout *)dt;
+
+       if (root)
+               root->m_OnFocusIdler();
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+void CSongLayout::m_OnFocusIdler(void)
+{
+       m->focusIdler = NULL;
+
+       Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist);
+       ASSERT(item);
+
+       elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+       elm_object_item_focus_set(item, EINA_TRUE);
+}
+
+
 char *CSongLayout::sm_CbGetListItemText(void *data, Evas_Object *obj, const char *part)
 {
        SSongItemInfo *itinfo = (SSongItemInfo *)data;
@@ -588,12 +612,7 @@ void CSongLayout::Update(bool focusFlag)
 void CSongLayout::SetFocus(const char *btnStr)
 {
        ASSERT(m);
-
-       Elm_Object_Item *item = elm_genlist_first_item_get(m->songlist);
-       ASSERT(item);
-
-       elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
-       elm_object_item_focus_set(item, EINA_TRUE);
+       m->focusIdler = ecore_idler_add(sm_CbFocusIdler, this);
 }