Delete current media from playlist
Summary: So you have unorganized files, or pseudo-organized files, and you dump them into rage. A song or video comes up that you don't want to bother with, so you want to hit delete to not play it. This will be more useful later with a "loop all" feature, but I implemented it now because I often bump into this situation. Reviewers: etrunko, raster Projects: #rage Differential Revision: https://phab.enlightenment.org/D1486 * also fix mem leak in not freeing vid struct content
This commit is contained in:
parent
ae23214e0e
commit
05608eec3a
|
@ -130,6 +130,10 @@ key_handle(Evas_Object *win, Evas_Event_Key_Down *ev)
|
||||||
if (win_video_have_next(win)) win_video_last(win);
|
if (win_video_have_next(win)) win_video_last(win);
|
||||||
else win_video_next(win);
|
else win_video_next(win);
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(ev->key, "Delete"))
|
||||||
|
{
|
||||||
|
win_video_delete(win);
|
||||||
|
}
|
||||||
else if ((!strcmp(ev->keyname, "m")) ||
|
else if ((!strcmp(ev->keyname, "m")) ||
|
||||||
(!strcmp(ev->key, "XF86AudioMute")))
|
(!strcmp(ev->key, "XF86AudioMute")))
|
||||||
{
|
{
|
||||||
|
|
|
@ -250,6 +250,41 @@ win_video_last(Evas_Object *win)
|
||||||
win_list_sel_update(win);
|
win_list_sel_update(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
win_video_delete(Evas_Object *win)
|
||||||
|
{
|
||||||
|
Inf *inf = evas_object_data_get(win, "inf");
|
||||||
|
Eina_List *l, *l_next;
|
||||||
|
Winvid_Entry *vid;
|
||||||
|
|
||||||
|
int direction = NULL; // -1 prev, 1 next
|
||||||
|
|
||||||
|
if (!inf->file_list) return;
|
||||||
|
|
||||||
|
// If we're able to delete something, do it,
|
||||||
|
// and decide on next/prev
|
||||||
|
if (win_video_have_next(win) || win_video_have_prev(win))
|
||||||
|
{
|
||||||
|
EINA_LIST_FOREACH_SAFE(inf->file_list, l, l_next, vid)
|
||||||
|
{
|
||||||
|
if (l == inf->file_cur)
|
||||||
|
{
|
||||||
|
if (vid->file) eina_stringshare_del(vid->file);
|
||||||
|
if (vid->sub) eina_stringshare_del(vid->sub);
|
||||||
|
free(vid);
|
||||||
|
inf->file_list = eina_list_remove_list(inf->file_list, l);
|
||||||
|
direction = (l_next == NULL ? -1 : 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move to a direction and update playlist, which is confused
|
||||||
|
if (direction == -1) win_do_prev(win);
|
||||||
|
else if (direction == 1) win_do_next(win);
|
||||||
|
win_list_content_update(win);
|
||||||
|
}
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
win_video_have_next(Evas_Object *win)
|
win_video_have_next(Evas_Object *win)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,6 +37,7 @@ void win_video_next(Evas_Object *win);
|
||||||
void win_video_prev(Evas_Object *win);
|
void win_video_prev(Evas_Object *win);
|
||||||
void win_video_first(Evas_Object *win);
|
void win_video_first(Evas_Object *win);
|
||||||
void win_video_last(Evas_Object *win);
|
void win_video_last(Evas_Object *win);
|
||||||
|
void win_video_delete(Evas_Object *win);
|
||||||
Eina_Bool win_video_have_next(Evas_Object *win);
|
Eina_Bool win_video_have_next(Evas_Object *win);
|
||||||
Eina_Bool win_video_have_prev(Evas_Object *win);
|
Eina_Bool win_video_have_prev(Evas_Object *win);
|
||||||
Evas_Object *win_add(void);
|
Evas_Object *win_add(void);
|
||||||
|
|
Loading…
Reference in New Issue