# HG changeset patch # User William Pitcock # Date 1236972127 18000 # Node ID 7ac9e8b91bbfb4876174c06eb6a96d1b0ba26c74 # Parent 38b491487bd87ceec76fa3dbb26cbb7ef1d7e36a Add playlist_shift(). diff -r 38b491487bd8 -r 7ac9e8b91bbf src/audlegacy/playlist.c --- a/src/audlegacy/playlist.c Thu May 21 19:17:02 2009 +0900 +++ b/src/audlegacy/playlist.c Fri Mar 13 14:22:07 2009 -0500 @@ -484,6 +484,52 @@ } void +playlist_shift(Playlist *playlist, gint delta) +{ + gint orig_delta; + GList *n, *tn; + g_return_if_fail(playlist != NULL); + + if (delta == 0) + return; + + PLAYLIST_LOCK(playlist); + + /* copy the delta over. */ + orig_delta = delta; + + /* even though it is unlikely we would ever be calling playlist_shift() + on an empty playlist... we should probably check for this. --nenolod */ + if ((n = playlist->entries) == NULL) + { + PLAYLIST_UNLOCK(playlist); + return; + } + + MOWGLI_ITER_FOREACH_SAFE(n, tn, playlist->entries) + { + PlaylistEntry *entry = PLAYLIST_ENTRY(n->data); + + if (!entry->selected) + continue; + + if (orig_delta > 0) + for (delta = orig_delta; delta > 0; delta--) + glist_movedown(n); + else (orig_delta < 0) + for (delta = orig_delta; delta > 0; delta--) + glist_moveup(n); + } + + /* do the remaining work. */ + playlist_generate_shuffle_list(playlist); + event_queue("playlist update", playlist); + PLAYLIST_INCR_SERIAL(playlist); + + PLAYLIST_UNLOCK(playlist); +} + +void playlist_clear(Playlist *playlist) { if (!playlist) diff -r 38b491487bd8 -r 7ac9e8b91bbf src/audlegacy/playlist.h --- a/src/audlegacy/playlist.h Thu May 21 19:17:02 2009 +0900 +++ b/src/audlegacy/playlist.h Fri Mar 13 14:22:07 2009 -0500 @@ -161,6 +161,7 @@ gint playlist_get_position_nolock(Playlist *playlist); gchar *playlist_get_info_text(Playlist *playlist); gint playlist_get_current_length(Playlist *playlist); +void playlist_shift(Playlist *playlist, gint delta); gboolean playlist_save(Playlist *playlist, const gchar * filename); gboolean playlist_load(Playlist *playlist, const gchar * filename);