summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/util/listmgr.h2
-rw-r--r--src/layout/gallery.c12
-rw-r--r--src/layout/movie.c15
-rw-r--r--src/layout/music.c15
-rw-r--r--src/util/listmgr.c54
5 files changed, 49 insertions, 49 deletions
diff --git a/include/util/listmgr.h b/include/util/listmgr.h
index 1820593..1999de3 100644
--- a/include/util/listmgr.h
+++ b/include/util/listmgr.h
@@ -57,7 +57,7 @@ bool listmgr_update_content_item(struct listmgr *lmgr);
bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list);
bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info);
-bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update);
+bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id);
bool listmgr_focus_play_info(struct listmgr *lmgr);
void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state);
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index 46fcc00..22e32e2 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -51,7 +51,6 @@ struct _priv {
struct listmgr_data *ldata;
struct mediadata *md;
- int cur_index;
Eina_List *media_list;
};
@@ -182,7 +181,6 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it)
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_VIEWER);
@@ -212,7 +210,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it,
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
@@ -442,7 +439,6 @@ static void _update(void *layout_data, int update_type, void *data)
{
struct view_update_data *vdata;
struct _priv *priv;
- bool update;
if (!layout_data) {
_ERR("failed to get layout data");
@@ -466,13 +462,7 @@ static void _update(void *layout_data, int update_type, void *data)
vdata = data;
- if (priv->cur_index != vdata->index)
- update = true;
- else
- update = false;
-
- listmgr_focus_content_list(priv->listmgr, vdata->index, update);
-
+ listmgr_focus_content_list(priv->listmgr, vdata->id);
break;
case UPDATE_RECENT:
if (!data) {
diff --git a/src/layout/movie.c b/src/layout/movie.c
index 9d6561c..4639e8a 100644
--- a/src/layout/movie.c
+++ b/src/layout/movie.c
@@ -59,7 +59,6 @@ struct _priv {
struct progressbar *prog;
Eina_List *media_list;
- int cur_index;
app_media *recent_info;
};
@@ -340,7 +339,6 @@ static void _item_selected(struct _priv *priv, app_media *am)
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_VIEWER);
@@ -403,7 +401,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it,
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
@@ -523,7 +520,7 @@ static app_media *_get_recent_item(Eina_List *list)
return am;
}
-static void _update_recent_item(struct _priv *priv, int index)
+static void _update_recent_item(struct _priv *priv, const char *id)
{
Eina_List *list;
app_media *am;
@@ -531,8 +528,8 @@ static void _update_recent_item(struct _priv *priv, int index)
list = mediadata_get_medialist(priv->md);
- if (index >= 0)
- am = eina_list_nth(list, index);
+ if (id)
+ am = util_find_media_info(list, id);
else
am = _get_recent_item(list);
@@ -714,11 +711,11 @@ static void _update(void *layout_data, int update_type, void *data)
switch (update_type) {
case UPDATE_CONTENT:
_update_content_list(priv);
- _update_recent_item(priv, -1);
+ _update_recent_item(priv, NULL);
break;
case UPDATE_CONTENT_ITEM:
listmgr_update_content_item(priv->listmgr);
- _update_recent_item(priv, -1);
+ _update_recent_item(priv, NULL);
break;
case UPDATE_FOCUS:
if (!data) {
@@ -729,7 +726,7 @@ static void _update(void *layout_data, int update_type, void *data)
vdata = data;
listmgr_focus_play_info(priv->listmgr);
- _update_recent_item(priv, vdata->index);
+ _update_recent_item(priv, vdata->id);
break;
case UPDATE_RECENT:
if (!data) {
diff --git a/src/layout/music.c b/src/layout/music.c
index e031fb6..1ff80c0 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -55,7 +55,6 @@ struct _priv {
struct mediadata *md;
Eina_List *media_list;
- int cur_index;
app_media *playing_info;
};
@@ -273,7 +272,6 @@ static void _item_selected(struct _priv *priv, app_media *am)
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_MPLAYER);
@@ -336,7 +334,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it,
vdata.list = mediadata_get_medialist(priv->md);
vdata.index = util_get_media_index(vdata.list, am);
- priv->cur_index = vdata.index;
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
viewmgr_show_view(VIEW_ACTION_MENU);
@@ -454,15 +451,15 @@ static app_media *_get_playing_item(Eina_List *list)
return am;
}
-static void _update_playing_item(struct _priv *priv, int index)
+static void _update_playing_item(struct _priv *priv, const char *id)
{
Eina_List *list;
app_media *am;
app_media_info *info;
list = mediadata_get_medialist(priv->md);
- if (index >= 0)
- am = eina_list_nth(list, index);
+ if (id)
+ am = util_find_media_info(list, id);
else
am = _get_playing_item(list);
@@ -641,11 +638,11 @@ static void _update(void *layout_data, int update_type, void *data)
switch (update_type) {
case UPDATE_CONTENT:
_update_content_list(priv);
- _update_playing_item(priv, -1);
+ _update_playing_item(priv, NULL);
break;
case UPDATE_CONTENT_ITEM:
listmgr_update_content_item(priv->listmgr);
- _update_playing_item(priv, -1);
+ _update_playing_item(priv, NULL);
break;
case UPDATE_PLAY_INFO:
if (!data) {
@@ -655,7 +652,7 @@ static void _update(void *layout_data, int update_type, void *data)
vdata = data;
- _update_playing_item(priv, vdata->index);
+ _update_playing_item(priv, vdata->id);
break;
case UPDATE_FOCUS:
listmgr_focus_play_info(priv->listmgr);
diff --git a/src/util/listmgr.c b/src/util/listmgr.c
index 0f8b84b..a96e005 100644
--- a/src/util/listmgr.c
+++ b/src/util/listmgr.c
@@ -452,6 +452,29 @@ bool _focus_to_content(struct listmgr *lmgr, Evas_Object *base)
return true;
}
+Elm_Object_Item *_get_grid_item(Evas_Object *grid, const char *id)
+{
+ Elm_Object_Item *it;
+ app_media *am;
+ app_media_info *mi;
+
+ for (it = elm_gengrid_first_item_get(grid); it;
+ it = elm_gengrid_item_next_get(it)) {
+ am = elm_object_item_data_get(it);
+ if (!am)
+ continue;
+
+ mi = app_media_get_info(am);
+ if (!mi)
+ continue;
+
+ if (!strcmp(id, mi->media_id))
+ return it;
+ }
+
+ return NULL;
+}
+
void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state)
{
if (!lmgr) {
@@ -477,26 +500,26 @@ bool listmgr_focus_play_info(struct listmgr *lmgr)
return true;
}
-bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update)
+bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id)
{
Eina_List *item, *l;
Evas_Object *ly, *grid;
Elm_Object_Item *it;
- int count;
- int r;
- if (!update) {
- r = _focus_to_content(lmgr, lmgr->focused);
- if (!r)
- _ERR("failed to focus to content");
- return r;
+ if (!lmgr) {
+ _ERR("failed to get listmgr");
+ return false;
+ }
+
+ if (!id) {
+ _ERR("invalid argument");
+ return false;
}
item = elm_box_children_get(lmgr->box);
- if (lmgr->show_play_info)
- item = eina_list_next(item);
grid = NULL;
+ it = NULL;
EINA_LIST_FOREACH(item, l, ly) {
grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT);
if (!grid) {
@@ -504,18 +527,11 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update)
return false;
}
- count = elm_gengrid_items_count(grid);
-
- if (index < count)
+ it = _get_grid_item(grid, id);
+ if (it)
break;
-
- index -= count;
}
- it = elm_gengrid_first_item_get(grid);
- while (index--)
- it = elm_gengrid_item_next_get(it);
-
if (!it) {
_ERR("failed to get current grid item");
return false;