2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
21 #include "homescreen-efl.h"
22 #include "option_menu.h"
23 #include "livebox/livebox_panel.h"
24 #include "livebox_all_pages.h"
25 #include "folder_panel.h"
29 static Eina_Bool __key_release_cb(void *data, int type, void *event);
30 static Eina_Bool __key_press_cb(void *data, int type, void *event);
35 Ecore_Event_Handler *press_handler;
36 Ecore_Event_Handler *release_handler;
37 Eina_Bool register_handler;
39 .pressed = EINA_FALSE,
40 .press_handler = NULL,
41 .release_handler = NULL,
42 .register_handler = EINA_FALSE
46 HAPI void key_register(void)
48 if (!key_info_s.release_handler) {
49 key_info_s.release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __key_release_cb, NULL);
50 if (!key_info_s.release_handler)
51 LOGE("Failed to register a key up event handler");
54 if (!key_info_s.press_handler) {
55 key_info_s.press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __key_press_cb, NULL);
56 if (!key_info_s.press_handler)
57 LOGE("Failed to register a key down event handler");
60 key_info_s.pressed = EINA_FALSE;
61 key_info_s.register_handler = EINA_TRUE;
65 HAPI void key_unregister(void)
67 if (key_info_s.release_handler) {
68 ecore_event_handler_del(key_info_s.release_handler);
69 key_info_s.release_handler = NULL;
72 if (key_info_s.press_handler) {
73 ecore_event_handler_del(key_info_s.press_handler);
74 key_info_s.press_handler = NULL;
77 key_info_s.register_handler = EINA_FALSE;
81 static Eina_Bool __key_press_cb(void *data, int type, void *event)
83 Evas_Event_Key_Down *ev = event;
85 if (!key_info_s.register_handler || !ev)
86 return ECORE_CALLBACK_RENEW;
88 key_info_s.pressed = EINA_TRUE;
90 return ECORE_CALLBACK_RENEW;
94 static Eina_Bool __key_release_cb(void *data, int type, void *event)
96 Evas_Event_Key_Up *ev = event;
98 if (!key_info_s.register_handler || !ev)
99 return ECORE_CALLBACK_RENEW;
101 LOGD("Key(%s) released %d", ev->keyname, key_info_s.pressed);
103 if (key_info_s.pressed == EINA_FALSE)
104 return ECORE_CALLBACK_RENEW;
106 if (!strcmp(ev->keyname, KEY_MENU)) {
107 LOGD("Menu pressed");
108 option_menu_change_state_on_hw_menu_key();
110 return ECORE_CALLBACK_RENEW;
113 /*TODO: Keyname to key menu and key home are the same, so this code is doesn't execute*/
114 if (!strcmp(ev->keyname, KEY_HOME)) {
115 LOGD("Home pressed");
116 home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
118 return ECORE_CALLBACK_RENEW;
121 if (!strcmp(ev->keyname, KEY_BACK)) {
122 homescreen_view_t view_t = home_screen_get_view_type();
125 if (popup_destroy()) {
126 /*we need to close only popup if it is visible. Dont change the view type.*/
127 return ECORE_CALLBACK_RENEW;
130 if (folder_panel_is_folder_visible()) {
131 folder_panel_close_folder();
132 return ECORE_CALLBACK_RENEW;
136 case HOMESCREEN_VIEW_HOME:
138 case HOMESCREEN_VIEW_HOME_EDIT:
139 home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
140 /*TODO: option menu should not have any info about livebox panel. This logic should be invoked in homescreen-efl.c*/
141 livebox_panel_set_edit_mode_layout(false);
142 livebox_panel_change_edit_mode_state(true);
144 case HOMESCREEN_VIEW_HOME_ALL_PAGES:
145 /*TODO: this should be invoked in homescreen-efl.c*/
146 livebox_all_pages_hide();
147 home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
149 case HOMESCREEN_VIEW_ALL_APPS:
150 home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
152 case HOMESCREEN_VIEW_ALL_APPS_CHOOSE:
153 folder_panel_cancel_add_icon();
154 folder_panel_set_click_ignore_state(false);
155 case HOMESCREEN_VIEW_ALL_APPS_EDIT:
156 home_screen_set_view_type(HOMESCREEN_VIEW_ALL_APPS);
158 case HOMESCREEN_VIEW_UNKNOWN:
165 if (!strcmp(ev->keyname, KEY_RETURN))
166 folder_panel_hide_input_panel();
169 key_info_s.pressed = EINA_FALSE;
171 return ECORE_CALLBACK_RENEW;