diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/layout/gallery.c | 3 | ||||
-rw-r--r-- | src/layout/movie.c | 3 | ||||
-rw-r--r-- | src/layout/music.c | 3 | ||||
-rw-r--r-- | src/util/listmgr.c | 58 | ||||
-rw-r--r-- | src/view/action_menu.c | 48 | ||||
-rw-r--r-- | src/view/base.c | 23 |
6 files changed, 119 insertions, 19 deletions
diff --git a/src/layout/gallery.c b/src/layout/gallery.c index d701a2c..46fcc00 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -455,6 +455,9 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_CONTENT: _update_content_list(priv); break; + case UPDATE_CONTENT_ITEM: + listmgr_update_content_item(priv->listmgr); + break; case UPDATE_FOCUS: if (!data) { _ERR("invalid argument"); diff --git a/src/layout/movie.c b/src/layout/movie.c index 59589f8..475db18 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -716,6 +716,9 @@ static void _update(void *layout_data, int update_type, void *data) _update_content_list(priv); _update_recent_item(priv, -1); break; + case UPDATE_CONTENT_ITEM: + listmgr_update_content_item(priv->listmgr); + break; case UPDATE_FOCUS: if (!data) { _ERR("invalid argument"); diff --git a/src/layout/music.c b/src/layout/music.c index 0920703..f3ce0b1 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -643,6 +643,9 @@ static void _update(void *layout_data, int update_type, void *data) _update_content_list(priv); _update_playing_item(priv, -1); break; + case UPDATE_CONTENT_ITEM: + listmgr_update_content_item(priv->listmgr); + break; case UPDATE_PLAY_INFO: if (!data) { _ERR("invalid argument"); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 65af1d6..0f8b84b 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -256,6 +256,18 @@ static void _item_focused_cb(void *data, Elm_Object_Item *it, lmgr->focused_it = it; } +static void _add_grid_item_callback(Elm_Object_Item *it, void *data) +{ + elm_object_item_signal_callback_add(it, SIG_ITEM_FOCUSED, + SIG_SOURCE_EDC, _item_focused_cb, data); +} + +static void _delete_grid_item_callback(Elm_Object_Item *it) +{ + elm_object_item_signal_callback_del(it, SIG_ITEM_FOCUSED, + SIG_SOURCE_EDC, _item_focused_cb); +} + static void _realized_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *it) { @@ -266,8 +278,7 @@ static void _realized_cb(int id, void *data, Evas_Object *obj, lmgr = data; - elm_object_item_signal_callback_add(it, SIG_ITEM_FOCUSED, - SIG_SOURCE_EDC, _item_focused_cb, lmgr); + _add_grid_item_callback(it, lmgr); } static void _unrealized_cb(int id, void *data, Evas_Object *obj, @@ -276,8 +287,7 @@ static void _unrealized_cb(int id, void *data, Evas_Object *obj, if (!it) return; - elm_object_item_signal_callback_del(it, SIG_ITEM_FOCUSED, - SIG_SOURCE_EDC, _item_focused_cb); + _delete_grid_item_callback(it); } static input_handler _grid_handler = { @@ -519,6 +529,46 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update) return true; } +void _update_grid_realized_items(struct listmgr *lmgr, Eina_List *list) +{ + Eina_List *l; + Elm_Object_Item *it; + + EINA_LIST_FOREACH(list, l, it) { + _delete_grid_item_callback(it); + + elm_gengrid_item_update(it); + _add_grid_item_callback(it, lmgr); + } +} + +bool listmgr_update_content_item(struct listmgr *lmgr) +{ + Eina_List *box_item, *grid_realized; + Eina_List *l; + Evas_Object *ly, *grid; + + if (!lmgr) { + _ERR("failed to get listmgr"); + return false; + } + + box_item = elm_box_children_get(lmgr->box); + + EINA_LIST_FOREACH(box_item, l, ly) { + grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT); + if (!grid) { + _ERR("failed to get grid object"); + return false; + } + + grid_realized = elm_gengrid_realized_items_get(grid); + _update_grid_realized_items(lmgr, grid_realized); + } + + return true; +} + bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list) { Evas_Object *ly, *btn, *grid; diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 34b682d..b8b899a 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -63,7 +63,7 @@ struct _priv { Eina_List *favorite_list; - app_media_info *mi; + app_media *am; int content_type; }; @@ -132,25 +132,46 @@ struct _content_info content_info[] = { static bool _favorite_clicked(struct _priv *priv, Evas_Object *obj) { + app_media_info *mi; int r; bool favorite; + r = media_content_connect(); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to connect to media content"); + return false; + } + + mi = app_media_get_info(priv->am); + if (!mi) { + _ERR("failed to get app media info"); + media_content_disconnect(); + return false; + } + r = app_contents_favorite_check(CONTENTS_MEDIA, - priv->mi->media_id, &favorite); + mi->media_id, &favorite); if (r != APP_CONTENTS_ERROR_NONE) { _ERR("failed to check favorite"); + media_content_disconnect(); return false; } r = app_contents_favorite_set(CONTENTS_MEDIA, - priv->mi->media_id, !favorite); + mi->media_id, !favorite); if (r != APP_CONTENTS_ERROR_NONE) { _ERR("failed to set favorite"); + media_content_disconnect(); return false; } + app_media_update(priv->am); + + viewmgr_update_view(VIEW_BASE, UPDATE_CONTENT_ITEM, NULL); viewmgr_hide_view(VIEW_ACTION_MENU); + media_content_disconnect(); + return true; } @@ -587,11 +608,18 @@ static void _set_menu_state(Evas_Object *btn, int idx, const char *id) static void _update_menu_area(struct _priv *priv) { Evas_Object *btn; + app_media_info *mi; int i; int col, row; elm_table_clear(priv->table, EINA_TRUE); + mi = app_media_get_info(priv->am); + if (!mi) { + _ERR("failed to get app media info"); + return; + } + for (i = 0; i < NUM_MENU_BTN; i++) { btn = elm_button_add(priv->base); if (!btn) { @@ -602,7 +630,7 @@ static void _update_menu_area(struct _priv *priv) elm_object_style_set(btn, menu_info[i].style); elm_object_text_set(btn, menu_info[i].title); - _set_menu_state(btn, i, priv->mi->media_id); + _set_menu_state(btn, i, mi->media_id); evas_object_show(btn); @@ -682,21 +710,21 @@ static bool _draw_items(struct _priv *priv) static bool _update_items(struct _priv *priv, struct view_update_data *vdata) { - app_media *am; + app_media_info *mi; - am = eina_list_nth(vdata->list, vdata->index); - if (!am) { + priv->am = eina_list_nth(vdata->list, vdata->index); + if (!priv->am) { _ERR("failed to get app media"); return false; } - priv->mi = app_media_get_info(am); - if (!priv->mi) { + mi = app_media_get_info(priv->am); + if (!mi) { _ERR("failed to get app media info"); return false; } - priv->content_type = _get_content_type(priv->mi); + priv->content_type = _get_content_type(mi); _update_menu_area(priv); _update_favorite_area(priv); diff --git a/src/view/base.c b/src/view/base.c index b1998b6..92a1cea 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -565,31 +565,44 @@ static void _update(void *view_data, int update_type, void *data) return; } - if (!data) { - _ERR("invalid argument"); - return; - } - priv = view_data; switch (update_type) { case UPDATE_FOCUS: case UPDATE_PLAY_INFO: + if (!data) + goto err; + vdata = data; layoutmgr_update_layout(priv->lmgr, g_menu_item[priv->current_layout].layout_id, update_type, vdata); break; + case UPDATE_CONTENT_ITEM: + layoutmgr_update_layout(priv->lmgr, + g_menu_item[priv->current_layout].layout_id, + update_type, NULL); + break; case UPDATE_FAVORITE: + if (!data) + goto err; + _update_favorite_view(priv, data); break; case UPDATE_RECENT: + if (!data) + goto err; + _update_recent_view(priv, data); break; default: break; } + + return; +err: + _ERR("invalid argument"); } static void _pause(void *view_data) |