#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
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;
return;
}
- inputmgr_add_callback(btn, 0, handler, priv);
+ inputmgr_add_callback(btn, type, &handler, priv);
priv->del_btn = btn;
}
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)
{
}
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;
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;
}
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);
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;