static Eina_Bool __key_release_cb(void *data, int type, void *event);
static Eina_Bool __key_press_cb(void *data, int type, void *event);
+typedef enum {
+ HW_KEY_NONE = -1,
+ HW_KEY_BACK,
+ HW_KEY_HOME,
+ HW_KEY_MENU,
+} hw_key_t;
static struct {
Eina_Bool pressed;
static Eina_Bool __key_release_cb(void *data, int type, void *event)
{
Evas_Event_Key_Up *ev = event;
+ hw_key_t pressed_key = HW_KEY_NONE;
if (!key_info_s.register_handler || !ev)
return ECORE_CALLBACK_RENEW;
if (key_info_s.pressed == EINA_FALSE)
return ECORE_CALLBACK_RENEW;
- if (!strcmp(ev->keyname, KEY_MENU)) {
- LOGD("Menu pressed");
- option_menu_change_state_on_hw_menu_key();
+ if (!strcmp(ev->keyname, KEY_BACK))
+ pressed_key = HW_KEY_BACK;
+ else if (!strcmp(ev->keyname, KEY_MENU))
+ pressed_key = HW_KEY_MENU;
+ else if(!strcmp(ev->keyname, KEY_HOME))
+ pressed_key = HW_KEY_HOME;
+ else {
+ key_info_s.pressed = EINA_FALSE;
return ECORE_CALLBACK_RENEW;
}
- /*TODO: Keyname to key menu and key home are the same, so this code is doesn't execute*/
- if (!strcmp(ev->keyname, KEY_HOME)) {
- LOGD("Home pressed");
- home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
+ if (pressed_key == HW_KEY_MENU) {
+ LOGD("Menu pressed");
+ option_menu_change_state_on_hw_menu_key();
return ECORE_CALLBACK_RENEW;
}
- if (!strcmp(ev->keyname, KEY_BACK)) {
- homescreen_view_t view_t = home_screen_get_view_type();
+ homescreen_view_t view_t = home_screen_get_view_type();
+
+ if (pressed_key == HW_KEY_BACK || pressed_key == HW_KEY_HOME) {
option_menu_hide();
if (popup_destroy()) {
break;
case HOMESCREEN_VIEW_ALL_APPS_CHOOSE:
home_screen_close_all_apps_choose_view();
+ if(pressed_key == HW_KEY_HOME)
+ home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
break;
case HOMESCREEN_VIEW_ALL_APPS_EDIT:
home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS);
+ if(pressed_key == HW_KEY_HOME)
+ home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
break;
case HOMESCREEN_VIEW_UNKNOWN:
break;