},
};
-static Eina_Bool _key_down_cb(void *data, int type, void *ei)
+static Eina_Bool _event(void *data, Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *ei)
{
struct _appdata *ad;
- Evas_Event_Key_Down *ev = ei;
size_t i, j;
+ char *keyname;
+ int update_type;
if (!data) {
_ERR("failed to get data");
- return false;
+ return EINA_FALSE;
}
ad = data;
- if (!ad->is_channel)
- return ECORE_CALLBACK_DONE;
-
- if (viewmgr_get_view_state(VIEW_PIN) ==
- VIEW_STATE_VISIBLE)
- return ECORE_CALLBACK_PASS_ON;
-
- if (!strcmp(ev->keyname, KEY_ENTER) ||
- !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
- if (viewmgr_active_view_count() > 0)
- return ECORE_CALLBACK_PASS_ON;
- }
-
- for (i = 0; i < sizeof(g_kmap) / sizeof(*g_kmap); i++) {
- j = 0;
- while (g_kmap[i].key[j]) {
- if (!strcmp(ev->keyname, g_kmap[i].key[j])) {
- viewmgr_update_view(g_kmap[i].view,
- UPDATE_TYPE_INPUT_KEY_DOWN, ev);
- return ECORE_CALLBACK_DONE;
- }
- j++;
- }
- }
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool _key_up_cb(void *data, int type, void *ei)
-{
- struct _appdata *ad;
- Evas_Event_Key_Up *ev = ei;
- size_t i, j;
-
- if (!data) {
- _ERR("failed to get data");
- return false;
- }
-
- ad = data;
if (!ad->is_channel)
- return ECORE_CALLBACK_DONE;
-
- if (viewmgr_get_view_state(VIEW_PIN) ==
- VIEW_STATE_VISIBLE)
- return ECORE_CALLBACK_PASS_ON;
-
- if (!strcmp(ev->keyname, KEY_ENTER) ||
- !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
- if (viewmgr_active_view_count() > 0)
- return ECORE_CALLBACK_PASS_ON;
+ return EINA_TRUE;
+
+ switch (type) {
+ case EVAS_CALLBACK_KEY_DOWN:
+ keyname = ((Evas_Event_Key_Down *)ei)->keyname;
+ update_type = UPDATE_TYPE_INPUT_KEY_DOWN;
+ break;
+ case EVAS_CALLBACK_KEY_UP:
+ keyname = ((Evas_Event_Key_Up *)ei)->keyname;
+ update_type = UPDATE_TYPE_INPUT_KEY_UP;
+ break;
+ default:
+ return EINA_FALSE;
}
for (i = 0; i < sizeof(g_kmap) / sizeof(*g_kmap); i++) {
j = 0;
while (g_kmap[i].key[j]) {
- if (!strcmp(ev->keyname, g_kmap[i].key[j])) {
+ if (!strcmp(keyname, g_kmap[i].key[j])) {
viewmgr_update_view(g_kmap[i].view,
- UPDATE_TYPE_INPUT_KEY_UP, ev);
- return ECORE_CALLBACK_DONE;
+ update_type, ei);
+ return EINA_TRUE;
}
j++;
}
}
- return ECORE_CALLBACK_PASS_ON;
+ return EINA_FALSE;
}
static Evas_Object *_add_win(const char *name)
ad->win = win;
tv_signal_cb_set(_tv_signal_cb, ad);
- ad->key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
- _key_down_cb, ad);
- ad->key_up = ecore_event_handler_add(ECORE_EVENT_KEY_UP,
- _key_up_cb, ad);
+ elm_object_event_callback_add(win, _event, ad);
elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN);
if (ad->win) {
tv_destroy();
- if (ad->key_down)
- ecore_event_handler_del(ad->key_down);
- if (ad->key_up)
- ecore_event_handler_del(ad->key_up);
+ elm_object_event_callback_del(ad->win, _event, ad);
viewmgr_remove_view(VIEW_CHANNELINFO);
viewmgr_remove_view(VIEW_CHANNELNUMBER);
_ERR("invalid channel");
viewmgr_hide_view(VIEW_CHANNELNUMBER);
- viewmgr_show_view(VIEW_CHANNELINFO);
return ECORE_CALLBACK_CANCEL;
}
Evas_Event_Key_Down *ev)
{
if (!strcmp(ev->keyname, KEY_ENTER) ||
- !strcmp(ev->keyname, KEY_ENTER_REMOTE))
+ !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+
_tune_channel(data);
+ }
}
static void _channel_mouse_down_cb(int id, void *data, Evas *e,
static int _get_number(const char *keyname)
{
- static const char const *keys[] = {
+ static const char * const keys[] = {
KEY_0, KEY_1, KEY_2, KEY_3, KEY_4,
KEY_5, KEY_6, KEY_7, KEY_8, KEY_9
};