diff options
Diffstat (limited to 'src/view/action_menu.c')
-rw-r--r-- | src/view/action_menu.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/view/action_menu.c b/src/view/action_menu.c index ef0cc30..73e281a 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -16,15 +16,75 @@ #include <Elementary.h> #include <app_debug.h> +#include <inputmgr.h> #include <viewmgr.h> #include "define.h" +#define TEXT_LIVETV "Live TV" + struct _priv { Evas_Object *win; Evas_Object *base; + + Evas_Object *tv_btn; +}; + +static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + if (!ev) + return; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) + viewmgr_pop_view(); +} + +static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev) +{ + if (!obj) + return; + + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); +} + +static input_handler _handler = { + .key_down = _key_down_cb, + .mouse_move = _mouse_move_cb }; +static bool _draw_livetv_btn(struct _priv *priv) +{ + Evas_Object *btn; + + btn = elm_button_add(priv->base); + if (!btn) { + _ERR("failed to create button object"); + return false; + } + + elm_object_style_set(btn, STYLE_BTN_LIVETV); + elm_object_text_set(btn, TEXT_LIVETV); + + inputmgr_add_callback(btn, 0, &_handler, priv); + + elm_object_part_content_set(priv->base, PART_ACTION_TV_BTN, btn); + + evas_object_show(btn); + + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT); + + priv->tv_btn = btn; + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -59,6 +119,12 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_ACTION_MENU, priv); + if (!_draw_livetv_btn(priv)) { + _ERR("failed to draw livetv button"); + free(priv); + return NULL; + } + return base; } @@ -74,6 +140,8 @@ static void _show(void *view_data) priv = view_data; evas_object_show(priv->base); + + elm_object_focus_set(priv->tv_btn, EINA_TRUE); } static void _hide(void *view_data) @@ -101,6 +169,8 @@ static void _destroy(void *view_data) priv = view_data; + inputmgr_remove_callback(priv->tv_btn, &_handler); + evas_object_del(priv->base); free(priv); |