bug fix - when, view will be hidden, if popup isn't null, delete it 80/47580/2
authorSoohye Shin <soohye.shin@samsung.com>
Sun, 6 Sep 2015 04:26:44 +0000 (13:26 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Mon, 7 Sep 2015 06:05:37 +0000 (15:05 +0900)
- user view
- user edit view
- action menu view
- photo view

Change-Id: I375181a8500de60310b3c6ee49c8b2e3395172de
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
include/defs.h
src/view/view_action_menu.c
src/view/view_photo.c
src/view/view_user.c
src/view/view_user_edit.c

index 482e5ef..132a694 100644 (file)
 #define TRANSITION_DECEL DECEL 0.3
 #define TRANSITION_LINEAR LINEAR 0.2
 
+#define TAG_POPUP "popup"
+#define TAG_CTXPOPUP "ctxpopup"
+
 #endif /* __AIR_HOME_DEFS_H__ */
index f0532be..30cd4a0 100644 (file)
@@ -171,6 +171,7 @@ static void _add_popup(struct _priv *priv, char *title, char *message,
                return;
        }
        inputmgr_add_callback(first_btn, first_btn_id, &handler, priv);
+       inputmgr_set_tags(first_btn, TAG_POPUP);
 
        second_btn = utils_add_button(popup, second_btn_message,
                        PART_POPUP_BUTTON_2);
@@ -180,14 +181,19 @@ static void _add_popup(struct _priv *priv, char *title, char *message,
                return;
        }
        inputmgr_add_callback(second_btn, second_btn_id, &handler, priv);
+       inputmgr_set_tags(second_btn, TAG_POPUP);
+
        elm_object_focus_set(second_btn, EINA_TRUE);
 
        priv->popup = popup;
 }
 
-static void _delete_popup(struct _priv *priv, Evas_Object *obj)
+static void _delete_popup(struct _priv *priv)
 {
-       inputmgr_remove_callback(obj, &handler);
+       if (!priv->popup)
+               return;
+
+       inputmgr_remove_all_by_tag(TAG_POPUP);
        evas_object_del(priv->popup);
        priv->popup = NULL;
 }
@@ -205,7 +211,7 @@ static void _delete_user(struct _priv *priv, Evas_Object *obj)
                return;
        }
 
-       _delete_popup(priv, obj);
+       _delete_popup(priv);
        snprintf(buf, sizeof(buf), "%s %s", priv->di->title,
                        MESSAGE_USER_DELETE);
        utils_add_toast(priv->win, buf);
@@ -255,20 +261,20 @@ static void _select(int id, void *data, Evas_Object *obj)
                viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_RESET, NULL);
                viewmgr_hide_view(VIEW_ACTION_MENU);
                viewmgr_hide_view(VIEW_USER_EDIT);
-               _delete_popup(priv, obj);
+               _delete_popup(priv);
 
                utils_launch_app(APP_ID_LIVETV, NULL, NULL);
                break;
        case INPUT_HANDLER_TYPE_POPUP_RESET:
                viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_RESET, NULL);
                elm_object_signal_emit(priv->base, SIG_HIDE, SRC_PROG);
-               _delete_popup(priv, obj);
+               _delete_popup(priv);
                break;
        case INPUT_HANDLER_TYPE_POPUP_DELETE:
                _delete_user(priv, obj);
                break;
        case INPUT_HANDLER_TYPE_POPUP_CANCEL:
-               _delete_popup(priv, obj);
+               _delete_popup(priv);
                break;
        default:
                return;
@@ -298,8 +304,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                case INPUT_HANDLER_TYPE_POPUP_DISCARD:
                case INPUT_HANDLER_TYPE_POPUP_DELETE:
                case INPUT_HANDLER_TYPE_POPUP_CANCEL:
-                       if (priv->popup)
-                               _delete_popup(priv, obj);
+                       _delete_popup(priv);
                        break;
                default:
                        return;
@@ -501,6 +506,7 @@ static void _hide(void *data)
                inputmgr_remove_callback(eo, &handler);
        }
 
+       _delete_popup(priv);
        elm_table_clear(priv->tbl, EINA_TRUE);
        evas_object_hide(priv->base);
        priv->list = NULL;
index d44b05b..777fa0e 100644 (file)
@@ -83,9 +83,12 @@ static input_handler handler = {
        .mouse_move = _mouse_move
 };
 
-static void _delete_popup(struct _priv *priv, Evas_Object *obj)
+static void _delete_popup(struct _priv *priv)
 {
-       inputmgr_remove_callback(obj, &handler);
+       if (!priv->popup)
+               return;
+
+       inputmgr_remove_all_by_tag(TAG_POPUP);
        evas_object_del(priv->popup);
        priv->popup = NULL;
 }
@@ -94,7 +97,7 @@ static void _select_done(struct _priv *priv, Evas_Object *obj)
 {
        char *thumb;
 
-       _delete_popup(priv, obj);
+       _delete_popup(priv);
        elm_object_focus_allow_set(priv->grid, EINA_TRUE);
        thumb = elm_object_item_data_get(priv->cur);
        if (thumb) {
@@ -127,7 +130,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                        _select_done(priv, obj);
                } else if (!strcmp(ev->keyname, KEY_BACK) ||
                                !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       _delete_popup(priv, obj);
+                       _delete_popup(priv);
                        elm_object_focus_allow_set(priv->grid, EINA_TRUE);
                        elm_object_focus_set(priv->grid, EINA_TRUE);
                }
@@ -141,7 +144,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                                !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
                                !strcmp(ev->keyname, KEY_BACK) ||
                                !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       _delete_popup(priv, obj);
+                       _delete_popup(priv);
                        elm_object_focus_allow_set(priv->grid, EINA_TRUE);
                        elm_object_focus_set(priv->grid, EINA_TRUE);
                }
@@ -168,7 +171,7 @@ static void _clicked(int id, void *data, Evas_Object *obj)
                        return;
 
                priv = data;
-               _delete_popup(priv, obj);
+               _delete_popup(priv);
                elm_object_focus_allow_set(priv->grid, EINA_TRUE);
                elm_object_focus_set(priv->grid, EINA_TRUE);
                break;
@@ -309,6 +312,7 @@ static void _add_viewer_popup(struct _priv *priv, char *file)
        }
        inputmgr_add_callback(cancel_btn, INPUT_HANDLER_TYPE_CANCEL, &handler,
                        priv);
+       inputmgr_set_tags(cancel_btn, TAG_POPUP);
 
        done_btn = utils_add_button(ly, MESSAGE_DONE, PART_PHOTO_VIEWER_DONE);
        if (!done_btn) {
@@ -318,6 +322,7 @@ static void _add_viewer_popup(struct _priv *priv, char *file)
        }
        inputmgr_add_callback(done_btn, INPUT_HANDLER_TYPE_DONE, &handler,
                        priv);
+       inputmgr_set_tags(done_btn, TAG_POPUP);
 
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 
@@ -451,6 +456,7 @@ static void _hide(void *data)
                evas_object_del(priv->ly);
                priv->ly = NULL;
        } else {
+               _delete_popup(priv);
                elm_gengrid_item_class_free(priv->grid_ic);
                inputmgr_remove_callback(priv->grid, &handler);
                evas_object_del(priv->grid);
index 2815bb7..9b3af7a 100644 (file)
@@ -47,6 +47,7 @@ struct _priv {
        Evas_Object *base;
        Evas_Object *scr;
        Evas_Object *box;
+       Evas_Object *popup;
        Eina_List *list;
 
        struct datamgr *dm;
@@ -150,8 +151,21 @@ static void _add_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(btn, INPUT_HANDLER_TYPE_BUTTON, &handler, popup);
+       inputmgr_add_callback(btn, INPUT_HANDLER_TYPE_BUTTON, &handler, priv);
+       inputmgr_set_tags(btn, TAG_POPUP);
        elm_object_focus_set(btn, EINA_TRUE);
+
+       priv->popup = popup;
+}
+
+static void _delete_popup(struct _priv *priv)
+{
+       if (!priv->popup)
+               return;
+
+       inputmgr_remove_all_by_tag(TAG_POPUP);
+       evas_object_del(priv->popup);
+       priv->popup = NULL;
 }
 
 static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
@@ -164,18 +178,16 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                return;
        }
 
+       priv = data;
        switch (id) {
        case INPUT_HANDLER_TYPE_BUTTON:
                if (!strcmp(ev->keyname, KEY_ENTER) ||
                                !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
                                !strcmp(ev->keyname, KEY_BACK) ||
-                               !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-                       inputmgr_remove_callback(obj, &handler);
-                       evas_object_del(data);
-               }
+                               !strcmp(ev->keyname, KEY_BACK_REMOTE))
+                       _delete_popup(priv);
                break;
        case INPUT_HANDLER_TYPE_BASE:
-               priv = data;
                if (!strcmp(ev->keyname, KEY_ENTER) ||
                                !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
                        if (priv->foc->di->action == ITEM_SELECT_ACTION_POP) {
@@ -216,15 +228,18 @@ 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)
 {
+       struct _priv *priv;
+
        if (!data) {
                _ERR("Invalid argument");
                return;
        }
 
+       priv = data;
+
        switch (id) {
        case INPUT_HANDLER_TYPE_BUTTON:
-               inputmgr_remove_callback(obj, &handler);
-               evas_object_del(data);
+               _delete_popup(priv);
                break;
        default:
                return;
@@ -520,6 +535,7 @@ static void _hide(void *data)
 
        priv = data;
 
+       _delete_popup(priv);
        _unload_user(priv);
 
        evas_object_hide(priv->base);
index 07548e9..b384d6e 100644 (file)
@@ -171,9 +171,12 @@ static void _get_profile(struct _priv *priv, const char **name,
        *photo = utils_get_icon_from_photo(*photo);
 }
 
-static void _delete_popup(struct _priv *priv, Evas_Object *obj)
+static void _delete_popup(struct _priv *priv)
 {
-       inputmgr_remove_callback(obj, &handler);
+       if (!priv->popup)
+               return;
+
+       inputmgr_remove_all_by_tag(TAG_POPUP);
        evas_object_del(priv->popup);
        priv->popup = NULL;
 }
@@ -199,6 +202,7 @@ static void _add_discard_popup(struct _priv *priv)
        }
        inputmgr_add_callback(discard_btn, INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD,
                        &handler, priv);
+       inputmgr_set_tags(discard_btn, TAG_POPUP);
 
        cancel_btn = utils_add_button(popup, MESSAGE_CANCEL,
                        PART_POPUP_BUTTON_2);
@@ -209,6 +213,8 @@ static void _add_discard_popup(struct _priv *priv)
        }
        inputmgr_add_callback(cancel_btn, INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL,
                        &handler, priv);
+       inputmgr_set_tags(cancel_btn, TAG_POPUP);
+
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 }
 
@@ -408,6 +414,7 @@ static void _add_icon_list(struct _priv *priv)
 
                inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler,
                                priv);
+               inputmgr_set_tags(eo, TAG_CTXPOPUP);
                if (i == 0)
                        elm_object_focus_set(eo, EINA_TRUE);
        }
@@ -578,13 +585,22 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        return base;
 }
 
-static void _select_eo(struct _priv *priv, Evas_Object *obj)
+static void _delete_ctxpopup(struct _priv *priv)
 {
-       const char *file, *focus_file;
+       if (!priv->ctxpopup)
+               return;
 
+       inputmgr_remove_all_by_tag(TAG_CTXPOPUP);
        evas_object_del(priv->ctxpopup);
        priv->ctxpopup = NULL;
        elm_object_focus_allow_set(priv->photo, EINA_TRUE);
+}
+
+static void _select_eo(struct _priv *priv, Evas_Object *obj)
+{
+       const char *file, *focus_file;
+
+       _delete_ctxpopup(priv);
 
        file = evas_object_data_get(obj, KEY_ICON);
        focus_file = utils_get_focus_photo_from_photo(file);
@@ -673,11 +689,9 @@ static void _select(struct _priv *priv, int id, Evas_Object *obj)
                viewmgr_pop_view();
                break;
        case INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD:
-               _delete_popup(priv, obj);
                viewmgr_pop_view();
-               break;
        case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
-               _delete_popup(priv, obj);
+               _delete_popup(priv);
                break;
        default:
                return;
@@ -824,15 +838,11 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                        viewmgr_pop_view();
                        break;
                case INPUT_HANDLER_TYPE_EO:
-                       evas_object_del(priv->ctxpopup);
-                       priv->ctxpopup = NULL;
-                       elm_object_focus_allow_set(priv->photo, EINA_TRUE);
+                       _delete_ctxpopup(priv);
                        break;
                case INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD:
-                       _delete_popup(priv, obj);
-                       break;
                case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
-                       _delete_popup(priv, obj);
+                       _delete_popup(priv);
                        break;
                default:
                        return;
@@ -953,6 +963,10 @@ static void _hide(void *data)
        }
 
        priv = data;
+
+       _delete_popup(priv);
+       _delete_ctxpopup(priv);
+
        priv->selected_photo = NULL;
        evas_object_hide(priv->base);
 }