From 71a571b82e5d6c4cc8d6edfbd9ac72efee49deed Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Tue, 16 Jun 2015 19:16:55 +0900 Subject: [PATCH] add focus input handler in view_home Change-Id: I5823c8aafbd29c6b1030b7c387d4a98d602f06e3 Signed-off-by: Soohye Shin --- edje/view/home.edc | 8 +++++++ include/defs.h | 5 +++++ src/view/view_home.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/edje/view/home.edc b/edje/view/home.edc index 465ad00..9fd5e12 100644 --- a/edje/view/home.edc +++ b/edje/view/home.edc @@ -487,6 +487,14 @@ group { target, "clip"; } program { + name, "sig,unfocus"; + signal, SIG_UNFOCUS; + source, SRC_PROG; + action, STATE_SET "default" 0.0; + transition, LINEAR 0.5; + target, "clip"; + } + program { name, "sig,focus,to,up"; signal, SIG_FOCUS_TO_UP; source, SRC_PROG; diff --git a/include/defs.h b/include/defs.h index 2d2733f..d7869fd 100644 --- a/include/defs.h +++ b/include/defs.h @@ -61,4 +61,9 @@ #define STYLE_LABEL_TITLE "slide_home_title" #define STYLE_LABEL_TITLE_FOCUS "slide_home_title_focus" +#define COLOR_DEFAULT_R 22 +#define COLOR_DEFAULT_G 120 +#define COLOR_DEFAULT_B 224 +#define COLOR_DEFAULT_A 255 + #endif /* __AIR_HOME_DEFS_H__ */ diff --git a/src/view/view_home.c b/src/view/view_home.c index 17eeed6..544e17e 100644 --- a/src/view/view_home.c +++ b/src/view/view_home.c @@ -31,6 +31,7 @@ struct _priv { Eina_List *list; struct datamgr *dm; + struct bar_item *foc; }; struct bar_item { @@ -109,6 +110,28 @@ static inline Evas_Object *_add_label(Evas_Object *eo, char *name, return lbl; } +static inline Evas_Object *_add_bg(Evas_Object *eo, const char *part) +{ + Evas_Object *bg; + + if (!eo || !part) { + _ERR("Invalid argument"); + return NULL; + } + + bg = evas_object_rectangle_add(evas_object_evas_get(eo)); + if (!bg) { + _ERR("failed to add label"); + return NULL; + } + + evas_object_color_set(bg, COLOR_DEFAULT_R, COLOR_DEFAULT_G, + COLOR_DEFAULT_B, COLOR_DEFAULT_A); + elm_object_part_content_set(eo, part, bg); + + return bg; +} + static bool _add_navigations(Evas_Object *base) { Evas_Object *ly; @@ -135,11 +158,38 @@ static bool _add_navigations(Evas_Object *base) return true; } +static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + struct _priv *priv; + struct bar_item *bi; + + if (!data) { + _ERR("Invalid argument"); + return; + } + + bi = data; + priv = bi->priv; + priv->foc = bi; + + elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); +} + +static void _unfocused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); +} + +static input_handler eo_handler = { + .focused = _focused, + .unfocused = _unfocused +}; + static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { struct bar_item *bi; - Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl; + Evas_Object *eo, *ic, *focus_ic, *lbl, *focus_lbl, *bg; if (!priv || !box || !di) { _ERR("Invalid argument"); @@ -176,6 +226,11 @@ static struct bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box, if (!focus_lbl) goto err; + bg = _add_bg(eo, PART_HOME_ITEM_BG); + if (!bg) + goto err; + + inputmgr_add_callback(eo, 0, &eo_handler, bi); elm_box_pack_end(box, eo); bi->priv = priv; @@ -323,6 +378,10 @@ static void _show(void *data) evas_object_show(priv->base); elm_object_signal_emit(priv->base, SIG_SHOW_NAVIGATION, SRC_PROG); + + if (!priv->foc) + priv->foc = eina_list_data_get(priv->list); + elm_object_focus_set(priv->foc->eo, EINA_TRUE); } static void _hide(void *data) @@ -352,6 +411,7 @@ static void _destroy(void *data) priv = data; EINA_LIST_FREE(priv->list, bi) { + inputmgr_remove_callback(bi->eo, &eo_handler); evas_object_del(bi->eo); free(bi); } -- 2.7.4