aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/playlist.c4
-rw-r--r--src/playlist.h7
-rw-r--r--src/playlist_control.c10
3 files changed, 15 insertions, 6 deletions
diff --git a/src/playlist.c b/src/playlist.c
index 79f6022a5..35c09329a 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -61,12 +61,16 @@ playlist_init(struct playlist *playlist)
playlist->queued = -1;
playlist->current = -1;
+
+ playlist->prev_elapsed = g_timer_new();
}
void
playlist_finish(struct playlist *playlist)
{
queue_finish(&playlist->queue);
+
+ g_timer_destroy(playlist->prev_elapsed);
}
/**
diff --git a/src/playlist.h b/src/playlist.h
index 4237cea98..57b2450fa 100644
--- a/src/playlist.h
+++ b/src/playlist.h
@@ -82,6 +82,13 @@ struct playlist {
* This variable is only valid if #playing is true.
*/
int queued;
+
+ /**
+ * This timer tracks the time elapsed since the last "prev"
+ * command. If that is less than one second ago, "prev" jumps
+ * to the previous song instead of rewinding the current song.
+ */
+ GTimer *prev_elapsed;
};
/** the global playlist object */
diff --git a/src/playlist_control.c b/src/playlist_control.c
index 4f51345c3..f1702149a 100644
--- a/src/playlist_control.c
+++ b/src/playlist_control.c
@@ -185,15 +185,11 @@ nextSongInPlaylist(struct playlist *playlist)
void previousSongInPlaylist(struct playlist *playlist)
{
- static time_t lastTime;
- time_t diff = time(NULL) - lastTime;
-
- lastTime += diff;
-
if (!playlist->playing)
return;
- if (diff && getPlayerElapsedTime() > PLAYLIST_PREV_UNLESS_ELAPSED) {
+ if (g_timer_elapsed(playlist->prev_elapsed, NULL) >= 1.0 &&
+ getPlayerElapsedTime() > PLAYLIST_PREV_UNLESS_ELAPSED) {
/* re-start playing the current song (just like the
"prev" button on CD players) */
@@ -213,6 +209,8 @@ void previousSongInPlaylist(struct playlist *playlist)
playPlaylistOrderNumber(playlist, playlist->current);
}
}
+
+ g_timer_start(playlist->prev_elapsed);
}
enum playlist_result