support mouse handling in view_recent 03/43903/1
authorSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 07:25:57 +0000 (16:25 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 07:25:57 +0000 (16:25 +0900)
- select recent item
- select delete button

Change-Id: If8184ff7ef9c3d4fc62a9cd4d54ab8971231081d
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
src/view/view_recent.c

index f8fe89c8a86edd18d61a064887083a52cbb04703..811106bd297223036178d83d33c071fe5b511ddd 100644 (file)
 #define MESSAGE_NO_CONTENTS "No Contents"
 #define PADDING_BOX 26
 
+enum input_handler_type {
+       INPUT_HANDLER_TYPE_EO,
+       INPUT_HANDLER_TYPE_DELETE,
+       INPUT_HANDLER_TYPE_DISABLE_DELETE
+};
+
 enum recent_item_type {
        RECENT_ITEM_ICON = 0x00,
        RECENT_ITEM_PREVIEW = 0x01
@@ -53,77 +59,144 @@ struct _bar_item {
        struct _priv *priv;
 };
 
-static void _btn_focused(int id, void *data, Evas_Object *obj,
+static void _focused(int id, void *data, Evas_Object *obj,
                Elm_Object_Item *item)
 {
-       elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
+       struct _bar_item *bi;
+
+       switch (id) {
+       case INPUT_HANDLER_TYPE_EO:
+               if (!data)
+                       return;
+
+               bi = data;
+               bi->priv->cur = bi;
+               /* fallthrought */
+       case INPUT_HANDLER_TYPE_DELETE:
+               elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
+               break;
+       default:
+               return;
+       }
 }
 
 static void _unfocused(int id, void *data, Evas_Object *obj,
                Elm_Object_Item *item)
 {
-       elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
-}
-
-static void _hide_done(void *data, Evas_Object *obj, const char *emission,
-               const char *source)
-{
-       viewmgr_pop_view();
+       switch (id) {
+       case INPUT_HANDLER_TYPE_EO:
+       case INPUT_HANDLER_TYPE_DELETE:
+               elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
+               break;
+       default:
+               return;
+       }
 }
 
-static void _dis_btn_key_down(int id, void *data, Evas *e, Evas_Object *obj,
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
        struct _priv *priv;
+       struct _bar_item *bi;
 
-       if (!data)
+       if (!data) {
+               _ERR("Invalid argument");
                return;
+       }
 
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE) ||
-                       !strcmp(ev->keyname, KEY_DOWN)) {
-               elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG);
+       switch (id) {
+       case INPUT_HANDLER_TYPE_EO:
+               bi = data;
+               priv = bi->priv;
+
+               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);
+               } else if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+                       datamgr_select_item(priv->dm, bi->di);
+               }
+               break;
+       case INPUT_HANDLER_TYPE_DELETE:
+               priv = data;
+
+               if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+                       elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
+                                       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);
+               } else if (!strcmp(ev->keyname, KEY_DOWN)) {
+                       if (!priv->cur)
+                               priv->cur = eina_list_data_get(priv->list);
+                       elm_object_focus_set(priv->cur->eo, EINA_TRUE);
+               }
+               break;
+       case INPUT_HANDLER_TYPE_DISABLE_DELETE:
+               priv = data;
+
+               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);
+               }
+               break;
+       default:
+               return;
        }
 }
 
-static input_handler dis_btn_handler = {
-       .key_down = _dis_btn_key_down
-};
-
-static void _btn_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)
 {
+       struct _bar_item *bi;
        struct _priv *priv;
 
-       if (!data)
+       if (!data) {
+               _ERR("Invalid argument");
                return;
+       }
 
-       priv = data;
+       switch (id) {
+       case INPUT_HANDLER_TYPE_EO:
+               bi = data;
+               priv = bi->priv;
+
+               datamgr_select_item(priv->dm, bi->di);
+               break;
+       case INPUT_HANDLER_TYPE_DELETE:
+               priv = data;
 
-       if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, 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);
-       } else if (!strcmp(ev->keyname, KEY_DOWN)) {
-               if (!priv->cur)
-                       priv->cur = eina_list_data_get(priv->list);
-               elm_object_focus_set(priv->cur->eo, EINA_TRUE);
+               elm_object_signal_emit(priv->base, SIG_HIDE_RECENT,
+                               SRC_PROG);
+               break;
+       default:
+               return;
        }
 }
 
-static input_handler btn_handler = {
-       .focused = _btn_focused,
+static input_handler handler = {
+       .focused = _focused,
        .unfocused = _unfocused,
-       .key_down = _btn_key_down
+       .key_down = _key_down,
+       .mouse_down = _mouse_down
 };
 
+static void _hide_done(void *data, Evas_Object *obj, const char *emission,
+               const char *source)
+{
+       viewmgr_pop_view();
+}
+
 static void _add_delete_btn(struct _priv *priv, const char *ic_image,
-               const char *focus_ic_image, input_handler *handler)
+               const char *focus_ic_image, enum input_handler_type type)
 {
        Evas_Object *btn, *ic, *focus_ic;
 
@@ -150,7 +223,7 @@ static void _add_delete_btn(struct _priv *priv, const char *ic_image,
                return;
        }
 
-       inputmgr_add_callback(btn, 0, handler, priv);
+       inputmgr_add_callback(btn, type, &handler, priv);
 
        priv->del_btn = btn;
 }
@@ -201,47 +274,6 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        return base;
 }
 
-static void _eo_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       struct _bar_item *bi;
-       struct _priv *priv;
-
-       if (!data)
-               return;
-
-       bi = data;
-       priv = bi->priv;
-
-       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);
-       } else if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               datamgr_select_item(priv->dm, bi->di);
-       }
-}
-
-static void _eo_focused(int id, void *data, Evas_Object *obj,
-               Elm_Object_Item *item)
-{
-       struct _bar_item *bi;
-
-       if (!data)
-               return;
-
-       elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
-
-       bi = data;
-       bi->priv->cur = bi;
-}
-
-static input_handler eo_handler = {
-       .focused = _eo_focused,
-       .unfocused = _unfocused,
-       .key_down = _eo_key_down
-};
-
 static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box,
                struct datamgr_item *di)
 {
@@ -305,7 +337,7 @@ static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box,
        }
 
        elm_object_focus_next_object_set(eo, priv->del_btn, ELM_FOCUS_UP);
-       inputmgr_add_callback(eo, 0, &eo_handler, bi);
+       inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi);
        elm_box_pack_end(box, eo);
 
        bi->eo = eo;
@@ -326,7 +358,8 @@ static void _load_recent(struct _priv *priv)
                elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS,
                                MESSAGE_NO_CONTENTS);
                _add_delete_btn(priv, IMAGE_RECENT_DELETE_DIS,
-                               IMAGE_RECENT_DELETE_DIS, &dis_btn_handler);
+                               IMAGE_RECENT_DELETE_DIS,
+                               INPUT_HANDLER_TYPE_DISABLE_DELETE);
                return;
        }
 
@@ -348,7 +381,7 @@ static void _load_recent(struct _priv *priv)
        elm_box_padding_set(box, PADDING_BOX * elm_config_scale_get(), 0);
 
        _add_delete_btn(priv, IMAGE_RECENT_DELETE_NOR, IMAGE_RECENT_DELETE_FOC,
-                       &btn_handler);
+                       INPUT_HANDLER_TYPE_DELETE);
 
        EINA_LIST_FOREACH(list, l, di) {
                bi = _pack_item(priv, box, di);
@@ -392,14 +425,14 @@ static void _unload_recent(struct _priv *priv)
        struct _bar_item *bi;
 
        EINA_LIST_FREE(priv->list, bi) {
-               inputmgr_remove_callback(bi->eo, &eo_handler);
+               inputmgr_remove_callback(bi->eo, &handler);
                evas_object_del(bi->eo);
                free(bi);
        }
 
        elm_box_clear(priv->box);
        evas_object_del(priv->scr);
-       inputmgr_remove_callback(priv->del_btn, &btn_handler);
+       inputmgr_remove_callback(priv->del_btn, &handler);
        evas_object_del(priv->del_btn);
 
        priv->del_btn = NULL;