set focus move policy form IN to CLICK 60/45160/1
authorSoohye Shin <soohye.shin@samsung.com>
Mon, 3 Aug 2015 07:26:26 +0000 (16:26 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Mon, 3 Aug 2015 07:31:44 +0000 (16:31 +0900)
Change-Id: I5d725f45937f96bb52a91f645230dd7703d823fb
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
edje/view/home.edc
edje/view/recent.edc
edje/view/user.edc
include/defs.h
src/main.c
src/view/view_home.c
src/view/view_photo.c
src/view/view_recent.c
src/view/view_user.c
src/view/view_user_edit.c

index 837fe49..c2fd4b6 100644 (file)
@@ -152,6 +152,11 @@ group {
                        transition, TRANSITION_DECEL;
                        target, "clip";
                        target, PART_HOME_MENU_BAR;
+                       after, "sig,show,done";
+               }
+               program {
+                       name, "sig,show,done";
+                       action, SIGNAL_EMIT SIG_SHOW_DONE SRC_EDJE;
                }
                program {
                        name, "sig,hide";
index a26d02b..4a60d10 100644 (file)
@@ -217,33 +217,38 @@ group {
        }
        programs {
                program {
-                       name, "sig,show,recent";
-                       signal, SIG_SHOW_RECENT;
+                       name, "sig,show";
+                       signal, SIG_SHOW;
                        source, SRC_PROG;
                        action, STATE_SET "show" 0.0;
                        transition, TRANSITION_DECEL;
                        target, "clip";
                        target, "guide";
+                       after, "sig,show,done";
                }
                program {
-                       name, "sig,hide,recent";
-                       signal, SIG_HIDE_RECENT;
+                       name, "sig,show,done";
+                       action, SIGNAL_EMIT SIG_SHOW_DONE SRC_EDJE;
+               }
+               program {
+                       name, "sig,hide";
+                       signal, SIG_HIDE;
                        source, SRC_PROG;
                        action, STATE_SET "default" 0.0;
                        transition, TRANSITION_DECEL;
                        target, "clip";
                        target, "guide";
-                       after, "sig.hide.recent.done";
+                       after, "sig,hide,done";
                }
                program {
-                       name, "sig.hide.recent.done";
-                       action, SIGNAL_EMIT SIG_HIDE_RECENT_DONE SRC_EDJE;
+                       name, "sig,hide,done";
+                       action, SIGNAL_EMIT SIG_HIDE_DONE SRC_EDJE;
                }
                program {
-                       name, "outside.up.clicked";
+                       name, "outside,up,clicked";
                        source, "outside.up";
                        signal, "mouse,clicked,1";
-                       action, SIGNAL_EMIT SIG_HIDE_RECENT SRC_PROG;
+                       action, SIGNAL_EMIT SIG_HIDE SRC_PROG;
                }
        }
 }
index 574b5eb..b7cddcf 100644 (file)
@@ -130,6 +130,11 @@ group {
                        target, "clip";
                        target, PART_USER_BAR;
                        target, "text";
+                       after, "sig,show,done";
+               }
+               program {
+                       name, "sig,show,done";
+                       action, SIGNAL_EMIT SIG_SHOW_DONE SRC_EDJE;
                }
                program {
                        name, "sig,hide";
index 752c66c..23a7573 100644 (file)
 #define SIG_UNFOCUS "sig.unfocus"
 #define SIG_UNFOCUS_TO_RIGHT "sig.unfocus.to.right"
 #define SIG_UNFOCUS_TO_LEFT "sig.unfocus.to.left"
-#define SIG_SHOW_RECENT "sig.show.recent"
-#define SIG_HIDE_RECENT "sig.hide.recent"
-#define SIG_HIDE_RECENT_DONE "sig.hide.recent.done"
 #define SIG_DISABLE "sig.disable"
 #define SIG_ENABLE "sig.enable"
 #define SIG_SHOW_MASK "sig.show.mask"
 #define SIG_SHOW "sig.show"
+#define SIG_SHOW_DONE "sig.show.done"
 #define SIG_HIDE "sig.hide"
 #define SIG_HIDE_DONE "sig.hide.done"
 #define SIG_CLICK_ITEM "sig.click.item"
index 8e734d1..9338fed 100644 (file)
@@ -57,7 +57,7 @@ static bool _create(void *user_data)
        ad = user_data;
 
        elm_theme_overlay_add(NULL, THEMEFILE);
-       elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN);
+       elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
 
        win = _add_win(ad->name);
        if (!win) {
index 22058d0..e65161d 100644 (file)
@@ -150,11 +150,26 @@ static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
        }
 }
 
+static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case INPUT_HANDLER_TYPE_DOWN:
+       case INPUT_HANDLER_TYPE_EO:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+               break;
+       default:
+               return;
+       }
+}
+
 static input_handler handler = {
        .focused = _focused,
        .unfocused = _unfocused,
        .key_down = _key_down,
-       .mouse_down = _mouse_down
+       .mouse_down = _mouse_down,
+       .mouse_move = _mouse_move
 };
 
 static bool _add_navigations(struct _priv *priv, Evas_Object *base)
@@ -311,6 +326,17 @@ static void _hide_done(void *data, Evas_Object *obj, const char *emission,
        datamgr_select_item(priv->dm, priv->foc->di);
 }
 
+static void _show_done(void *data, Evas_Object *obj, const char *emission,
+               const char *source)
+{
+       struct _priv *priv = data;
+
+       if (!priv->foc)
+               priv->foc = eina_list_data_get(priv->list);
+
+       elm_object_focus_set(priv->foc->eo, EINA_TRUE);
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -356,6 +382,8 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        viewmgr_set_view_data(VIEW_HOME, priv);
        elm_object_signal_callback_add(base, SIG_HIDE_DONE, SRC_EDJE,
                        _hide_done, priv);
+       elm_object_signal_callback_add(base, SIG_SHOW_DONE, SRC_EDJE,
+                       _show_done, priv);
 
        return base;
 }
@@ -376,10 +404,6 @@ static void _show(void *data)
        evas_object_show(priv->base);
        elm_object_signal_emit(priv->base, SIG_SHOW_NAVIGATION, SRC_PROG);
        elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG);
-
-       if (!priv->foc)
-               priv->foc = eina_list_data_get(priv->list);
-       elm_object_focus_set(priv->foc->eo, EINA_TRUE);
 }
 
 static void _unload_home(struct _priv *priv)
index 1360ce4..f417d54 100644 (file)
@@ -50,12 +50,37 @@ struct _priv {
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev);
 
-static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Mouse_Up *ev);
+static void _clicked(int id, void *data, Evas_Object *obj);
+
+static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       Elm_Object_Item *it;
+
+       switch (id) {
+       case INPUT_HANDLER_TYPE_GRID:
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                               ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (!elm_object_item_focus_get(it))
+                       elm_object_item_focus_set(it, EINA_TRUE);
+               break;
+       case INPUT_HANDLER_TYPE_DONE:
+       case INPUT_HANDLER_TYPE_CANCEL:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+               break;
+       default:
+               return;
+       }
+}
 
 static input_handler handler = {
        .key_down = _key_down,
-       .mouse_up = _mouse_up
+       .clicked = _clicked,
+       .mouse_move = _mouse_move
 };
 
 static void _delete_popup(struct _priv *priv, Evas_Object *obj)
@@ -126,8 +151,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
        }
 }
 
-static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Mouse_Up *ev)
+static void _clicked(int id, void *data, Evas_Object *obj)
 {
        struct _priv *priv;
 
index 54bad0b..f1445b1 100644 (file)
@@ -112,8 +112,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                if (!strcmp(ev->keyname, KEY_DOWN) ||
                                !strcmp(ev->keyname, KEY_BACK) ||
                                !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
-                                       SRC_PROG);
+                       elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
                } else if (!strcmp(ev->keyname, KEY_ENTER) ||
                                !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
                        datamgr_select_item(priv->dm, bi->di);
@@ -124,13 +123,11 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
 
                if (!strcmp(ev->keyname, KEY_BACK) ||
                                !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
-                                       SRC_PROG);
+                       elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
                } else if (!strcmp(ev->keyname, KEY_ENTER) ||
                                !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
                        datamgr_clear_item(priv->dm);
-                       elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
-                                       SRC_PROG);
+                       elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
                } else if (!strcmp(ev->keyname, KEY_DOWN)) {
                        if (!priv->cur)
                                priv->cur = eina_list_data_get(priv->list);
@@ -143,8 +140,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                if (!strcmp(ev->keyname, KEY_DOWN) ||
                                !strcmp(ev->keyname, KEY_BACK) ||
                                !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
-                                       SRC_PROG);
+                       elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
                }
                break;
        default:
@@ -174,19 +170,26 @@ static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
                priv = data;
 
                datamgr_clear_item(priv->dm);
-               elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
-                               SRC_PROG);
+               elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
                break;
        default:
                return;
        }
 }
 
+static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
 static input_handler handler = {
        .focused = _focused,
        .unfocused = _unfocused,
        .key_down = _key_down,
-       .mouse_down = _mouse_down
+       .mouse_down = _mouse_down,
+       .mouse_move = _mouse_move
 };
 
 static void _hide_done(void *data, Evas_Object *obj, const char *emission,
@@ -228,6 +231,20 @@ static void _add_delete_btn(struct _priv *priv, const char *ic_image,
        priv->del_btn = btn;
 }
 
+static void _show_done(void *data, Evas_Object *obj, const char *emission,
+               const char *source)
+{
+       struct _priv *priv = data;
+       struct _bar_item *bi;
+
+       if (!priv->list) {
+               elm_object_focus_set(priv->del_btn, EINA_TRUE);
+       } else {
+               bi = eina_list_data_get(priv->list);
+               elm_object_focus_set(bi->eo, EINA_TRUE);
+       }
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -268,8 +285,10 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        priv->dm = dm;
 
        viewmgr_set_view_data(VIEW_RECENT, priv);
-       elm_object_signal_callback_add(base, SIG_HIDE_RECENT_DONE, SRC_EDJE,
+       elm_object_signal_callback_add(base, SIG_HIDE_DONE, SRC_EDJE,
                        _hide_done, NULL);
+       elm_object_signal_callback_add(base, SIG_SHOW_DONE, SRC_EDJE,
+                       _show_done, priv);
 
        return base;
 }
@@ -397,7 +416,6 @@ static void _load_recent(struct _priv *priv)
 static void _show(void *data)
 {
        struct _priv *priv;
-       struct _bar_item *bi;
 
        if (!data) {
                _ERR("Invalid argument");
@@ -406,17 +424,10 @@ static void _show(void *data)
 
        priv = data;
 
-       evas_object_show(priv->base);
-       elm_object_signal_emit(priv->base, SIG_SHOW_RECENT, SRC_PROG);
-
        _load_recent(priv);
 
-       if (!priv->list) {
-               elm_object_focus_set(priv->del_btn, EINA_TRUE);
-       } else {
-               bi = eina_list_data_get(priv->list);
-               elm_object_focus_set(bi->eo, EINA_TRUE);
-       }
+       evas_object_show(priv->base);
+       elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG);
 }
 
 static void _unload_recent(struct _priv *priv)
index 60f811f..4ff15ff 100644 (file)
@@ -116,11 +116,19 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
 static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Mouse_Down *ev);
 
+static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
 static input_handler handler = {
        .focused = _focused,
        .unfocused = _unfocused,
        .key_down = _key_down,
-       .mouse_down = _mouse_down
+       .mouse_down = _mouse_down,
+       .mouse_move = _mouse_move
 };
 
 static void _add_popup(struct _priv *priv)
@@ -227,6 +235,17 @@ static void _hide_done(void *data, Evas_Object *obj, const char *emission,
        viewmgr_pop_view();
 }
 
+static void _show_done(void *data, Evas_Object *obj, const char *emission,
+               const char *source)
+{
+       struct _priv *priv = data;
+
+       if (!priv->foc)
+               priv->foc = eina_list_data_get(priv->list);
+
+       elm_object_focus_set(priv->foc->eo, EINA_TRUE);
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -271,7 +290,8 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        inputmgr_add_callback(base, INPUT_HANDLER_TYPE_BASE, &handler, priv);
        elm_object_signal_callback_add(base, SIG_HIDE_DONE, SRC_EDJE,
                        _hide_done, NULL);
-
+       elm_object_signal_callback_add(base, SIG_SHOW_DONE, SRC_EDJE,
+                       _show_done, priv);
        return base;
 }
 
@@ -451,11 +471,6 @@ static void _show(void *data)
        elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG);
 
        _add_user(priv);
-
-       if (!priv->foc)
-               priv->foc = eina_list_data_get(priv->list);
-
-       elm_object_focus_set(priv->foc->eo, EINA_TRUE);
 }
 
 static void _unload_user(struct _priv *priv)
index 6ce8a13..2496098 100644 (file)
@@ -126,14 +126,22 @@ static void _unfocused(int id, void *data, Evas_Object *obj,
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev);
 
-static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Mouse_Down *ev);
+static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Up *ev);
+
+static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
 
 static input_handler handler = {
        .focused = _focused,
        .unfocused = _unfocused,
        .key_down = _key_down,
-       .mouse_down = _mouse_down
+       .mouse_up = _mouse_up,
+       .mouse_move = _mouse_move
 };
 
 static void _get_profile(struct _priv *priv, const char **name,
@@ -282,6 +290,13 @@ static Evas_Object *_pack_icon(Evas_Object *table, struct icon_info *_icon_info,
        return eo;
 }
 
+static void _dismissed(void *data, Evas_Object *obj, void *ei)
+{
+       struct _priv *priv = data;
+
+       elm_object_focus_allow_set(priv->photo, EINA_TRUE);
+}
+
 static void _add_icon_list(struct _priv *priv)
 {
        Evas_Coord x, y, w, h;
@@ -296,6 +311,7 @@ static void _add_icon_list(struct _priv *priv)
        }
        elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
        elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed, priv);
 
        ly = utils_add_layout(ctxpopup, GRP_USER_EDIT_ICON_LIST, false, NULL);
        if (!ly) {
@@ -336,6 +352,7 @@ static void _add_icon_list(struct _priv *priv)
                        elm_object_focus_set(eo, EINA_TRUE);
        }
 
+       elm_object_focus_allow_set(priv->photo, EINA_FALSE);
        priv->ctxpopup = ctxpopup;
 }
 
@@ -479,6 +496,8 @@ static void _add_delete_popup(struct _priv *priv)
        inputmgr_add_callback(cancel_btn,
                        INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL,
                        &handler, priv);
+
+       elm_object_focus_allow_set(priv->del, EINA_FALSE);
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 }
 
@@ -488,13 +507,15 @@ static void _select_eo(struct _priv *priv, Evas_Object *obj)
 
        evas_object_del(priv->ctxpopup);
        priv->ctxpopup = NULL;
+       elm_object_focus_allow_set(priv->photo, EINA_TRUE);
 
        file = evas_object_data_get(obj, KEY_ICON);
        focus_file = utils_get_focus_photo_from_photo(file);
 
-       if (!strcmp(file, ICON_ADD) || !strcmp(focus_file, ICON_ADD))
+       if (!strcmp(file, ICON_ADD) || !strcmp(focus_file, ICON_ADD)) {
                viewmgr_push_view(VIEW_PHOTO);
-       else
+               elm_object_focus_allow_set(obj, EINA_FALSE);
+       } else
                _load_user_icon(priv, file, focus_file);
 }
 
@@ -540,6 +561,7 @@ static void _select(struct _priv *priv, int id, Evas_Object *obj)
                break;
        case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE:
                _delete_popup(priv, obj);
+               elm_object_focus_allow_set(priv->del, EINA_TRUE);
                priv->di->action = ITEM_SELECT_ACTION_DELETE;
                datamgr_select_item(priv->dm, priv->di);
                viewmgr_pop_view();
@@ -549,6 +571,7 @@ static void _select(struct _priv *priv, int id, Evas_Object *obj)
                viewmgr_pop_view();
                break;
        case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL:
+               elm_object_focus_allow_set(priv->del, EINA_TRUE);
        case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
                _delete_popup(priv, obj);
                break;
@@ -585,14 +608,17 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                case INPUT_HANDLER_TYPE_EO:
                        evas_object_del(priv->ctxpopup);
                        priv->ctxpopup = NULL;
+                       elm_object_focus_allow_set(priv->photo, EINA_TRUE);
                        break;
                case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE:
                        _delete_popup(priv, obj);
+                       elm_object_focus_allow_set(priv->del, EINA_TRUE);
                        break;
                case INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD:
                        _delete_popup(priv, obj);
                        break;
                case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL:
+                       elm_object_focus_allow_set(priv->del, EINA_TRUE);
                case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
                        _delete_popup(priv, obj);
                        break;
@@ -608,8 +634,8 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
        }
 }
 
-static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Mouse_Down *ev)
+static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Up *ev)
 {
        struct _priv *priv;