Update action menu layout 48/48348/2 accepted/tizen/tv/20150920.232732 submit/tizen/20150918.092121
authorjinwoo.shin <jw0227.shin@samsung.com>
Fri, 18 Sep 2015 09:06:07 +0000 (18:06 +0900)
committerjinwoo.shin <jw0227.shin@samsung.com>
Fri, 18 Sep 2015 09:09:24 +0000 (18:09 +0900)
- Supports action menu scrolling
- Added more button on the bottom

Change-Id: Ie91f1ca23802575b9ba1bbd3a58b7763faeda82d
Signed-off-by: jinwoo.shin <jw0227.shin@samsung.com>
data/view/action_menu.edc
include/define.h
include/strings.h
src/view_action_menu.c

index 5d02e59..ff4b944 100644 (file)
@@ -27,16 +27,27 @@ group {
                        }
                }
                part {
-                       name, "menu_area";
+                       name, "menu_bg";
                        type, RECT;
                        scale, 1;
                        description {
                                state, "default" 0.0;
                                color, 255 255 255 255;
+                               rel1.to, PART_CONTENT;
+                               rel2.to, PART_CONTENT;
+                       }
+               }
+
+               part {
+                       name, PART_CONTENT;
+                       type, SWALLOW;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
                                rel1.relative, 1.0 0.0;
                                min, 500 0;
                                align, 0.0 0.0;
-                               fixed, 1 1;
+                               fixed, 1 0;
                        }
                        description {
                                state, "show" 0.0;
@@ -52,9 +63,9 @@ group {
                        description {
                                state, "default" 0.0;
                                color, 0 0 0 25;
-                               rel1.to, "menu_area";
+                               rel1.to, PART_CONTENT;
                                rel2 {
-                                       to, "menu_area";
+                                       to, PART_CONTENT;
                                        relative, 0.0 1.0;
                                }
                                min, 1 0;
@@ -64,17 +75,82 @@ group {
                }
 
                part {
-                       name, "padding.livetv.btn";
+                       name, "padding.channelinfo";
                        type, SPACER;
                        scale, 1;
                        description {
                                state, "default" 0.0;
-                               rel1.to, "menu_area";
+                               rel1.relative, 0.0 0.0;
+                               rel2.relative, 0.0 0.0;
+                               min, 40 40;
+                               align, 0.0 0.0;
+                               fixed, 1 1;
+                       }
+               }
+
+               part {
+                       name, PART_CHANNELINFO;
+                       type, SWALLOW;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               rel1 {
+                                       to, "padding.channelinfo";
+                                       relative, 1.0 1.0;
+                               }
                                rel2 {
-                                       to, "menu_area";
-                                       relative, 1.0 0.0;
+                                       to, "padding.channelinfo";
+                                       relative, 1.0 1.0;
                                }
-                               min, 0 118;
+                               min, 536 174;
+                               align, 0.0 0.0;
+                               fixed, 1 1;
+                       }
+               }
+
+       }
+       programs {
+               program {
+                       signal, SIGNAL_SHOW;
+                       action, STATE_SET "show" 0.0;
+                       target, PART_CONTENT;
+                       transition, CUBIC_BEZIER 0.667 TRANSITION_EASE_IN_OUT;
+               }
+               program {
+                       signal, SIGNAL_HIDE;
+                       source, SOURCE_ELM;
+                       action, STATE_SET "default" 0.0;
+                       target, PART_CONTENT;
+                       transition, CUBIC_BEZIER 0.334 TRANSITION_EASE_OUT;
+                       after, "hide_finished";
+               }
+               program {
+                       name, "hide_finished";
+                       action, SIGNAL_EMIT SIGNAL_HIDE_FINISHED SOURCE_ELM;
+               }
+       }
+}
+
+group {
+       name, GRP_ACTION_MENU_TOP;
+       parts {
+               part {
+                       name, "area";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               min, 500 346;
+                       }
+               }
+               part {
+                       name, "padding.livetv.btn";
+                       type, SPACER;
+                       scale, 1;
+                       description {
+                               state, "default" 0.0;
+                               rel2.relative, 1.0 0.0;
+                               min, 0 120;
                                align, 0.5 0.0;
                                fixed, 0 1;
                        }
@@ -113,7 +189,7 @@ group {
                                }
                                rel2.to, "padding.livetv.btn";
                                min, 0 1;
-                               align, 0.5 1.0;
+                               align, 0.0 1.0;
                                fixed, 0 1;
                        }
                }
@@ -124,16 +200,9 @@ group {
                        scale, 1;
                        description {
                                state, "default" 0.0;
-                               rel1 {
-                                       to, PART_MENU;
-                                       relative, 0.0 0.0;
-                               }
-                               rel2 {
-                                       to, PART_MENU;
-                                       relative, 1.0 1.0;
-                               }
+                               rel1.to, PART_MENU;
+                               rel2.to, PART_MENU;
                                align, 0.0 0.0;
-                               fixed, 1 1;
                                color, 224 224 224 255;
                        }
                }
@@ -146,14 +215,14 @@ group {
                                state, "default" 0.0;
                                rel1 {
                                        to, "padding.menu.divider.up";
-                                       relative, 0.0 1.0;
+                                       relative, 0.5 1.0;
                                }
                                rel2 {
                                        to, "padding.menu.divider.up";
-                                       relative, 0.0 1.0;
+                                       relative, 0.5 1.0;
                                }
-                               min, 500 0;
-                               align, 0.0 0.0;
+                               min, 500 126;
+                               align, 0.5 0.0;
                                fixed, 1 1;
                        }
                }
@@ -245,165 +314,80 @@ group {
                                fixed, 1 1;
                        }
                }
+       }
+}
 
+group {
+       name, GRP_ACTION_MENU_BOTTOM;
+       parts {
                part {
-                       name, PART_FAVORITE;
-                       type, SWALLOW;
+                       name, "padding.more.btn";
+                       type, SPACER;
                        scale, 1;
                        description {
                                state, "default" 0.0;
-                               rel1 {
-                                       to, "padding.favorite.list";
-                                       relative, 0.5 1.0;
-                               }
-                               rel2 {
-                                       to, "padding.favorite.list";
-                                       relative, 0.5 1.0;
-                               }
-                               min, 440 0;
-                               align, 0.5 0.0;
-                               fixed, 1 1;
+                               rel1.relative, 0.0 0.0;
+                               rel2.relative, 1.0 0.0;
+                               min, 0 116;
+                               align, 0.0 0.0;
+                               fixed, 1 0;
                        }
                }
 
                part {
-                       name, "padding.favorite.list_bottom";
-                       type, SPACER;
+                       name, PART_MORE_BUTTON;
+                       type, SWALLOW;
                        scale, 1;
                        description {
                                state, "default" 0.0;
                                rel1 {
-                                       to, "menu_area";
-                                       relative, 0.0 1.0;
+                                       to, "padding.more.btn";
+                                       relative, 0.5 0.5;
                                }
                                rel2 {
-                                       to, "menu_area";
-                                       relative, 1.0 1.0;
+                                       to, "padding.more.btn";
+                                       relative, 0.5 0.5;
                                }
-                               min, 0 32;
-                               align, 0.0 1.0;
+                               min, 184 60;
+                               align, 0.5 0.5;
                                fixed, 1 1;
                        }
                }
+       }
+}
 
+group {
+       name, GRP_ACTION_MENU_NO_FAVORITE;
+       parts {
                part {
                        name, "part.favorite.no_favorite";
                        type, RECT;
                        scale, 1;
                        description {
                                state, "default" 0.0;
-                               rel1 {
-                                       to, "padding.favorite.list";
-                                       relative, 0.5 1.0;
-                               }
-                               rel2 {
-                                       to, "padding.favorite.list_bottom";
-                                       relative, 0.5 0.0;
-                               }
-                               min, 440 0;
+                               rel1.relative, 0.5 0.0;
+                               rel2.relative, 0.5 0.0;
+                               min, 440 616;
                                align, 0.5 0.0;
-                               fixed, 1 1;
                                color, COLOR_NOFAVORITE_BG;
-                               visible, 0;
-                       }
-                       description {
-                               state, "no_favorite" 0.0;
-                               inherit, "default" 0.0;
-                               visible, 1;
-                       }
-
-                       part {
-                               name, "part.favorite.no_favorite.text";
-                               type, TEXT;
-                               scale, 1;
-                               description {
-                                       state, "default" 0.0;
-                                       text {
-                                               font, FONT_LIGHT;
-                                               size, 28;
-                                               align, 0.5 0.5;
-                                               text, STR_NOFAVORITE;
-                                       }
-                                       color, COLOR_NOFAVORITE_TEXT;
-                                       visible, 0;
-                               }
-                               description {
-                                       state, "no_favorite" 0.0;
-                                       inherit, "default" 0.0;
-                                       visible, 1;
-                               }
                        }
                }
-
                part {
-                       name, "padding.channelinfo";
-                       type, SPACER;
-                       scale, 1;
-                       description {
-                               state, "default" 0.0;
-                               rel1.relative, 0.0 0.0;
-                               rel2.relative, 0.0 0.0;
-                               min, 40 40;
-                               align, 0.0 0.0;
-                               fixed, 1 1;
-                       }
-               }
-
-               part {
-                       name, PART_CHANNELINFO;
-                       type, SWALLOW;
+                       name, "part.favorite.no_favorite.text";
+                       type, TEXT;
                        scale, 1;
                        description {
                                state, "default" 0.0;
-                               rel1 {
-                                       to, "padding.channelinfo";
-                                       relative, 1.0 1.0;
-                               }
-                               rel2 {
-                                       to, "padding.channelinfo";
-                                       relative, 1.0 1.0;
+                               rel1.to, "part.favorite.no_favorite";
+                               rel2.to, "part.favorite.no_favorite";
+                               text {
+                                       font, FONT_LIGHT;
+                                       size, 28;
+                                       align, 0.5 0.5;
+                                       text, STR_NOFAVORITE;
                                }
-                               min, 536 174;
-                               align, 0.0 0.0;
-                               fixed, 1 1;
+                               color, COLOR_NOFAVORITE_TEXT;
                        }
                }
        }
-
-       programs {
-               program {
-                       signal, SIGNAL_SHOW;
-                       action, STATE_SET "show" 0.0;
-                       target, "menu_area";
-                       transition, CUBIC_BEZIER 0.667 TRANSITION_EASE_IN_OUT;
-        }
-               program {
-                       signal, SIGNAL_HIDE;
-                       source, SOURCE_ELM;
-                       action, STATE_SET "default" 0.0;
-                       target, "menu_area";
-                       transition, CUBIC_BEZIER 0.334 TRANSITION_EASE_OUT;
-                       after, "hide_finished";
-               }
-               program {
-                       name, "hide_finished";
-                       action, SIGNAL_EMIT SIGNAL_HIDE_FINISHED SOURCE_ELM;
-               }
-               program {
-                       name, "no_favorite";
-                       signal, SIGNAL_NO_FAVORITE;
-                       source, SOURCE_ELM;
-                       action, STATE_SET "no_favorite" 0.0;
-                       target, "part.favorite.no_favorite";
-                       target, "part.favorite.no_favorite.text";
-               }
-               program {
-                       name, "favorite";
-                       signal, SIGNAL_FAVORITE;
-                       action, STATE_SET "default" 0.0;
-                       source, SOURCE_ELM;
-                       target, "part.favorite.no_favorite";
-                       target, "part.favorite.no_favorite.text";
-               }
-       }
 }
index b919392..369ce08 100644 (file)
 
 #define VIEW_ACTION_MENU "VIEW_ACTION_MENU"
 #define GRP_VIEW_ACTION_MENU "grp.view.action_menu"
+#define PART_CHANNELINFO "part.channelinfo"
+#define GRP_ACTION_MENU_TOP "grp.action_menu_top"
 #define PART_TOP_BUTTON "part.top.button"
 #define PART_MENU "part.menu"
-#define PART_FAVORITE "part.favorite"
-#define PART_CHANNELINFO "part.channelinfo"
+#define GRP_ACTION_MENU_BOTTOM "grp.action_menu_bottom"
+#define PART_MORE_BUTTON "part.more.button"
+#define GRP_ACTION_MENU_NO_FAVORITE "grp.action_menu_no_favorite"
 
 #define VIEW_PIN "VIEW_PIN"
 #define MESSAGE_SUCCESS "success"
index d21f511..21aba70 100644 (file)
@@ -25,6 +25,7 @@
 #define STR_NOSIGNAL_TITLE "Weak or No Signal"
 #define STR_NOSIGNAL_TEXT "Check the antenna cable connection"
 #define STR_LIVETV "Live TV"
+#define STR_BUTTON_MORE "More"
 #define STR_BUTTON_FAVORITE "Favorite"
 #define STR_BUTTON_LOCK "Lock"
 #define STR_BUTTON_UNLOCK "Unlock"
index a116748..10362f1 100644 (file)
 #define BUTTON_BORDER 1
 #define ITEMS_IN_ROW 4
 #define FAVORITE_PADDING_Y 32
+#define FAVORITE_MAX 10
+#define SCROLLER_STEP_SIZE 334
+
+#define TAG_FAVORITE "TAG_FAVORITE"
 
 #define STYLE_LIVETV_BTN "style.livetv.button"
 #define STYLE_ACTION_MENU_BTN "style.action.menu.button"
@@ -39,6 +43,7 @@
 enum _button_id {
        BUTTON_INVALID = -1,
        BUTTON_LIVETV,
+       BUTTON_MORE,
        BUTTON_FAV,
        BUTTON_LOCK,
        BUTTON_CHANNEL,
@@ -54,6 +59,9 @@ enum _button_state {
 struct _priv {
        Evas_Object *win;
        Evas_Object *base;
+       Evas_Object *scroller;
+       Evas_Object *box;
+       Evas_Object *menu;
        Evas_Object *channel_info;
        Evas_Object *menu_btn[BUTTON_MAX];
        Evas_Object *favorite;
@@ -355,7 +363,7 @@ static void _button_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
 static input_handler button_handler = {
        .key_up = _button_key_up_cb,
        .mouse_up = _button_mouse_up_cb,
-       .mouse_move = _button_mouse_move_cb
+       .mouse_move = _button_mouse_move_cb,
 };
 
 static void _favorite_clicked_cb(int id, void *data, Evas_Object *obj)
@@ -389,26 +397,28 @@ static void _update_favorite(struct _priv *priv)
 {
        Eina_List *channel_list, *l;
        const struct tv_channel_info *channel_info;
-       Evas_Object *btn, *obj;
+       Evas_Object *btn, *no_favorite;
        char buf[BUF_MAX];
        int i;
 
        channel_list = tv_channel_get_favorite_list();
 
-       i = 0;
-       while ((obj = elm_table_child_get(priv->favorite, 0, i++)))
-               inputmgr_remove_callback(obj, &favorite_handler);
-
-       elm_table_clear(priv->favorite, EINA_TRUE);
+       inputmgr_remove_all_by_tag(TAG_FAVORITE);
+       elm_box_clear(priv->favorite);
 
        if (!channel_list) {
-               elm_object_signal_emit(priv->base,
-                               SIGNAL_NO_FAVORITE, SOURCE_ELM);
+               no_favorite = util_add_layout(priv->favorite,
+                               GRP_ACTION_MENU_NO_FAVORITE);
+               if (!no_favorite) {
+                       _ERR("failed to create no favorite layout");
+                       return;
+               }
+
+               elm_box_pack_end(priv->favorite, no_favorite);
+
                return;
        }
 
-       elm_object_signal_emit(priv->base, SIGNAL_FAVORITE, SOURCE_ELM);
-
        i = 0;
        EINA_LIST_FOREACH(channel_list, l, channel_info) {
                if (channel_info->channel_minor > 0 &&
@@ -421,18 +431,22 @@ static void _update_favorite(struct _priv *priv)
                        snprintf(buf, sizeof(buf), "%lu %s",
                                        channel_info->channel_major,
                                        channel_info->channel_name);
-               btn = util_add_button(priv->base, NULL, buf,
+               btn = util_add_button(priv->menu, NULL, buf,
                                STYLE_ACTION_MENU_FAVORITE);
                if (!btn) {
-                       _ERR("Add button failed.");
+                       _ERR("failed to create favorite item");
                        continue;
                }
 
                util_add_icon(btn, IMAGE_FAVORITE_DEFAULT, PART_CONTENT);
                inputmgr_add_callback(btn, channel_info->service_id,
                                &favorite_handler, NULL);
+               inputmgr_set_tags(btn, TAG_FAVORITE);
+
+               elm_box_pack_end(priv->favorite, btn);
 
-               elm_table_pack(priv->favorite, btn, 0, i++, 1, 1);
+               if (++i == FAVORITE_MAX)
+                       break;
        }
 
        tv_channel_del_list(channel_list);
@@ -455,7 +469,7 @@ static bool _draw_channel_info(struct _priv *priv)
 
        layout = util_add_layout(priv->base, GRP_CHANNELINFO);
        if (!layout) {
-               _ERR("Add layout failed.");
+               _ERR("failed to create channel info layout");
                return false;
        }
 
@@ -466,43 +480,27 @@ static bool _draw_channel_info(struct _priv *priv)
        return true;
 }
 
-static bool _draw_top_area(struct _priv *priv)
-{
-       Evas_Object *btn;
-
-       btn = util_add_button(priv->base,
-                       PART_TOP_BUTTON, STR_LIVETV, STYLE_LIVETV_BTN);
-       if (!btn) {
-               _ERR("Add button failed.");
-               return false;
-       }
-
-       elm_object_disabled_set(btn, EINA_TRUE);
-
-       return true;
-}
-
-static bool _draw_menu_area(struct _priv *priv)
+static bool _draw_action_area(struct _priv *priv)
 {
        Evas_Object *table, *btn;
        int i, row, col;
 
-       table = elm_table_add(priv->base);
+       table = elm_table_add(priv->menu);
        if (!table) {
-               _ERR("Add table failed.");
+               _ERR("failed to create action table");
                return false;
        }
        elm_table_padding_set(table, BUTTON_BORDER, BUTTON_BORDER);
        evas_object_show(table);
-       elm_object_part_content_set(priv->base, PART_MENU, table);
+       elm_object_part_content_set(priv->menu, PART_MENU, table);
 
        i = 0;
        while (buttons[i].id != BUTTON_INVALID && i < BUTTON_MAX) {
-               btn = util_add_button(priv->base, NULL,
+               btn = util_add_button(priv->menu, NULL,
                                buttons[i].data[UNTOGGLE].text,
                                buttons[i].style);
                if (!btn) {
-                       _ERR("Add button failed.");
+                       _ERR("failed to create action button");
                        evas_object_del(table);
                        return false;
                }
@@ -537,16 +535,11 @@ static bool _draw_menu_area(struct _priv *priv)
                i++;
        }
 
-       elm_object_focus_next_object_set(priv->menu_btn[0],
-                       priv->menu_btn[i - 1], ELM_FOCUS_LEFT);
-       elm_object_focus_next_object_set(priv->menu_btn[i - 1],
-                       priv->menu_btn[0], ELM_FOCUS_RIGHT);
-
        while (col + 1 != ITEMS_IN_ROW) {
-               btn = util_add_button(priv->base, NULL, NULL,
+               btn = util_add_button(priv->menu, NULL, NULL,
                                STYLE_ACTION_MENU_BTN);
                if (!btn) {
-                       _ERR("Add button failed.");
+                       _ERR("failed to create action button");
                        evas_object_del(table);
                        return false;
                }
@@ -563,20 +556,66 @@ static bool _draw_menu_area(struct _priv *priv)
        return true;
 }
 
+static bool _draw_top_area(struct _priv *priv)
+{
+       Evas_Object *layout, *btn;
+
+       layout = util_add_layout(priv->box, GRP_ACTION_MENU_TOP);
+       if (!layout) {
+               _ERR("failed to create menu layout");
+               return false;
+       }
+       elm_box_pack_end(priv->box, layout);
+
+       btn = util_add_button(layout,
+                       PART_TOP_BUTTON, STR_LIVETV, STYLE_LIVETV_BTN);
+       if (!btn) {
+               _ERR("failed to create live button");
+               return false;
+       }
+
+       elm_object_disabled_set(btn, EINA_TRUE);
+
+       priv->menu = layout;
+
+       return _draw_action_area(priv);
+}
+
+static bool _draw_favorite_area(struct _priv *priv)
+{
+       Evas_Object *box;
+
+       box = elm_box_add(priv->box);
+       if (!box) {
+               _ERR("failed to create favorite box");
+               return false;
+       }
+       elm_box_padding_set(box, 0, FAVORITE_PADDING_Y);
+       evas_object_show(box);
+       elm_box_pack_end(priv->box, box);
+
+       priv->favorite = box;
+
+       return true;
+}
+
 static bool _draw_bottom_area(struct _priv *priv)
 {
-       Evas_Object *table;
+       Evas_Object *layout, *btn;
 
-       table = elm_table_add(priv->base);
-       if (!table) {
-               _ERR("Add table failed.");
+       layout = util_add_layout(priv->box, GRP_ACTION_MENU_BOTTOM);
+       if (!layout) {
+               _ERR("failed to create menu layout");
                return false;
        }
-       elm_table_padding_set(table, 0, FAVORITE_PADDING_Y);
-       evas_object_show(table);
-       elm_object_part_content_set(priv->base, PART_FAVORITE, table);
+       elm_box_pack_end(priv->box, layout);
 
-       priv->favorite = table;
+       btn = util_add_button(layout,
+                       PART_MORE_BUTTON, STR_BUTTON_MORE, STYLE_LIVETV_BTN);
+       if (!btn) {
+               _ERR("failed to create more button");
+               return false;
+       }
 
        return true;
 }
@@ -584,22 +623,22 @@ static bool _draw_bottom_area(struct _priv *priv)
 static void _draw_view_content(struct _priv *priv)
 {
        if (!_draw_channel_info(priv)) {
-               _ERR("Draw channel info failed.");
+               _ERR("failed to draw channel info");
                return;
        }
 
        if (!_draw_top_area(priv)) {
-               _ERR("Draw top area failed.");
+               _ERR("failed to draw top");
                return;
        }
 
-       if (!_draw_menu_area(priv)) {
-               _ERR("Draw menu area failed.");
+       if (!_draw_favorite_area(priv)) {
+               _ERR("failed to draw favorite");
                return;
        }
 
        if (!_draw_bottom_area(priv))
-               _ERR("Draw bottom area failed.");
+               _ERR("failed to draw bottom");
 }
 
 static void _hide_finished_cb(void *data, Evas_Object *obj,
@@ -618,16 +657,16 @@ static void _hide_finished_cb(void *data, Evas_Object *obj,
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
-       Evas_Object *base;
+       Evas_Object *base, *scroller, *box;
 
        if (!win) {
-               _ERR("Get window object failed.");
+               _ERR("failed to get win object");
                return NULL;
        }
 
        priv = calloc(1, sizeof(*priv));
        if (!priv) {
-               _ERR("Calloc failed.");
+               _ERR("failed to allocate priv");
                return NULL;
        }
 
@@ -642,18 +681,20 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        elm_win_resize_object_add(win, base);
 
+       scroller = util_add_scroller(base, NULL);
+       elm_scroller_step_size_set(scroller, 0, SCROLLER_STEP_SIZE);
+
+       box = util_add_box(scroller, NULL);
+       elm_box_align_set(box, 0.5, 0.0);
+
+       priv->box = box;
+       priv->scroller = scroller;
        priv->base = base;
        priv->win = win;
 
-       if (!viewmgr_set_view_data(VIEW_ACTION_MENU, priv)) {
-               _ERR("Set view data failed.");
-               evas_object_del(base);
-               free(priv);
-               return NULL;
-       }
-
        _draw_view_content(priv);
 
+       viewmgr_set_view_data(VIEW_ACTION_MENU, priv);
        inputmgr_add_callback(priv->base, 0, &key_handler, priv);
        elm_layout_signal_callback_add(priv->base, SIGNAL_HIDE_FINISHED,
                        SOURCE_ELM, _hide_finished_cb, priv);
@@ -666,7 +707,7 @@ static void _show(void *data)
        struct _priv *priv;
 
        if (!data) {
-               _ERR("Get data failed.");
+               _ERR("failed to get data");
                return;
        }
        priv = data;
@@ -675,6 +716,8 @@ static void _show(void *data)
        _update_menu(priv);
        _update_favorite(priv);
 
+       elm_scroller_region_show(priv->scroller, 0, 0, 0, 0);
+
        evas_object_show(priv->base);
 
        elm_object_focus_set(priv->menu_btn[0], EINA_TRUE);
@@ -685,7 +728,7 @@ static void _hide(void *data)
        struct _priv *priv;
 
        if (!data) {
-               _ERR("Get data failed.");
+               _ERR("failed to get data");
                return;
        }
        priv = data;
@@ -696,11 +739,10 @@ static void _hide(void *data)
 static void _destroy(void *data)
 {
        struct _priv *priv;
-       Evas_Object *obj;
        int i;
 
        if (!data) {
-               _ERR("Get data failed.");
+               _ERR("failed to get data");
                return;
        }
        priv = data;
@@ -713,9 +755,7 @@ static void _destroy(void *data)
                i++;
        }
 
-       i = 0;
-       while ((obj = elm_table_child_get(priv->favorite, 0, i++)))
-               inputmgr_remove_callback(obj, &favorite_handler);
+       inputmgr_remove_all_by_tag(TAG_FAVORITE);
 
        evas_object_del(priv->base);