Index: apps/cuesheet.c =================================================================== --- apps/cuesheet.c (revision 24000) +++ apps/cuesheet.c (working copy) @@ -316,7 +316,8 @@ * it also returns false if we weren't in a cuesheet. * direction should be 1 or -1. */ -bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_pos) +bool curr_cuesheet_skip(struct cuesheet *cue, int direction, + unsigned long curr_pos, unsigned long default_skip_tresh) { int track = cue_find_current_track(cue, curr_pos); @@ -328,7 +329,18 @@ else { if (!(direction <= 0 && track == 0)) - track += direction; + { + /* If skipping forward, skip to next cuesheet segment. If skipping + backward before default_skip_tresh milliseconds have elapsed, skip + to previous cuesheet segment. If skipping backward after + default_skip_tresh seconds have elapsed, skip to the start of the + current cuesheet segment */ + if (direction == 1 || + ((curr_pos - cue->tracks[track].offset) < default_skip_tresh)) + { + track += direction; + } + } seek(cue->tracks[track].offset); return true; Index: apps/cuesheet.h =================================================================== --- apps/cuesheet.h (revision 24000) +++ apps/cuesheet.h (working copy) @@ -73,7 +73,8 @@ void cue_spoof_id3(struct cuesheet *cue, struct mp3entry *id3); /* skip to next track in the cuesheet towards "direction" (which is 1 or -1) */ -bool curr_cuesheet_skip(struct cuesheet *cue, int direction, unsigned long curr_pos); +bool curr_cuesheet_skip(struct cuesheet *cue, int direction, + unsigned long curr_pos, unsigned long default_skip_tresh); #ifdef HAVE_LCD_BITMAP /* draw track markers on the progressbar */ Index: apps/gui/wps.c =================================================================== --- apps/gui/wps.c (revision 24000) +++ apps/gui/wps.c (working copy) @@ -442,7 +442,8 @@ { if (wps_state.id3->cuesheet) { - curr_cuesheet_skip(wps_state.id3->cuesheet, -1, wps_state.id3->elapsed); + curr_cuesheet_skip(wps_state.id3->cuesheet, -1, + wps_state.id3->elapsed, DEFAULT_SKIP_TRESH); return; } @@ -467,7 +468,8 @@ /* take care of if we're playing a cuesheet */ if (wps_state.id3->cuesheet) { - if (curr_cuesheet_skip(wps_state.id3->cuesheet, 1, wps_state.id3->elapsed)) + if (curr_cuesheet_skip(wps_state.id3->cuesheet, 1, + wps_state.id3->elapsed, DEFAULT_SKIP_TRESH)) { /* if the result was false, then we really want to skip to the next track */