From 6706930f141831c41fbba35920bbf89ea87edcae Mon Sep 17 00:00:00 2001 From: Jin Yoon Date: Wed, 10 Jul 2013 22:54:04 +0900 Subject: [PATCH] N_SE-45660 : Focus the first item of the other page when user moves pages by a keyboard. --- data/org.tizen.menu-screen.xml.in | 2 +- include/page_scroller.h | 1 + packaging/org.tizen.menu-screen.spec | 2 +- src/key.c | 13 ++++++++++--- src/page_scroller.c | 28 ++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/data/org.tizen.menu-screen.xml.in b/data/org.tizen.menu-screen.xml.in index 921afd4..5b0d81d 100755 --- a/data/org.tizen.menu-screen.xml.in +++ b/data/org.tizen.menu-screen.xml.in @@ -1,5 +1,5 @@ - + Jin Yoon Youngjoo Park diff --git a/include/page_scroller.h b/include/page_scroller.h index c482831..282a5f2 100644 --- a/include/page_scroller.h +++ b/include/page_scroller.h @@ -51,6 +51,7 @@ extern void page_scroller_unedit(Evas_Object *scroller); extern bool page_scroller_is_edited(Evas_Object *scroller); extern void page_scroller_focus(Evas_Object *scroller); +extern void page_scroller_focus_into_vector(Evas_Object *scroller, int vector); #endif //__MENU_SCREEN_PAGE_SCROLLER_H__ diff --git a/packaging/org.tizen.menu-screen.spec b/packaging/org.tizen.menu-screen.spec index 848f599..489af88 100644 --- a/packaging/org.tizen.menu-screen.spec +++ b/packaging/org.tizen.menu-screen.spec @@ -16,7 +16,7 @@ Name: org.tizen.menu-screen Summary: An utility library of the menu screen -Version: 1.1.12 +Version: 1.1.13 Release: 1.1 Group: TO_BE/FILLED_IN License: Flora Software License diff --git a/src/key.c b/src/key.c index 007a0a3..5b24628 100644 --- a/src/key.c +++ b/src/key.c @@ -78,6 +78,7 @@ static Eina_Bool _key_release_cb(void *data, int type, void *event) Evas_Object *scroller = evas_object_data_get(all_apps, "scroller"); break_if(NULL == scroller); + int left = 0; if (!strcmp(ev->keyname, KEY_SELECT) || !strcmp(ev->keyname, KEY_BACK)) { if (popup_exist()) { popup_destroy_all(); @@ -87,16 +88,22 @@ static Eina_Bool _key_release_cb(void *data, int type, void *event) if (all_apps_layout_is_edited(all_apps)) { all_apps_layout_unedit(all_apps); } - } else if (!strcmp(ev->keyname, KEY_LEFT) || !strcmp(ev->keyname, KEY_RIGHT)) { - + } else if ((left = !strcmp(ev->keyname, KEY_LEFT)) || + !strcmp(ev->keyname, KEY_RIGHT)) + { int cur_idx = page_scroller_get_current_page_no(scroller); - int idx = 0, x = 0, w = 0; elm_scroller_region_get(scroller, &x, NULL, &w, NULL); if (w) idx = x / w; if (cur_idx != idx) { page_scroller_bring_in(scroller, idx); + break; + } + + int vector = left ? -1 : 1; + if (x % w) { + page_scroller_focus_into_vector(scroller, vector); } } } while (0); diff --git a/src/page_scroller.c b/src/page_scroller.c index 2882abd..5cf2f72 100644 --- a/src/page_scroller.c +++ b/src/page_scroller.c @@ -1280,4 +1280,32 @@ HAPI void page_scroller_focus(Evas_Object *scroller) +HAPI void page_scroller_focus_into_vector(Evas_Object *scroller, int vector) +{ + int idx = 0; + idx = page_scroller_get_current_page_no(scroller); + idx += vector; + + ret_if(0 > idx); + + Evas_Object *page = NULL; + page = page_scroller_get_page_at(scroller, (unsigned int) idx); + ret_if(NULL == page); + + Evas_Object *item = NULL; + item = page_get_item_at(page, 0); + ret_if(NULL == item); + + Evas_Object *focus_button = NULL; + focus_button = elm_object_part_content_get(item, "focus"); + ret_if(NULL == focus_button); + + _D("Focus set scroller(%p), page:%d, item:%s", scroller, idx, item_get_name(item)); + elm_object_focus_set(focus_button, EINA_TRUE); + + page_scroller_bring_in(scroller, idx); +} + + + // End of a file -- 2.34.1