summaryrefslogtreecommitdiff
path: root/src/view/action_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/view/action_menu.c')
-rw-r--r--src/view/action_menu.c70
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);