Patch taken from xmms-crossfade 3.10 tarball. Required for crossfade to work. http://www.eisenlohr.org/xmms-crossfade/ diff -ur bmp-0.9.7.1/beep/mainwin.c bmp-0.9.7.1.patched/beep/mainwin.c --- bmp-0.9.7.1/beep/mainwin.c 2005-05-09 10:45:39.000000000 +0200 +++ bmp-0.9.7.1.patched/beep/mainwin.c 2005-11-25 00:03:59.000000000 +0100 @@ -655,9 +655,11 @@ mainwin_set_shade(!cfg.player_shaded); } +gboolean is_quitting = FALSE; void mainwin_quit_cb(void) { + is_quitting = TRUE; gtk_widget_hide(equalizerwin); gtk_widget_hide(playlistwin); gtk_widget_hide(mainwin); @@ -1318,7 +1320,7 @@ change_song(guint pos) { if (bmp_playback_get_playing()) - bmp_playback_stop(); + bmp_playback_stop_for_restart(); playlist_set_position(pos); bmp_playback_initiate(); diff -ur bmp-0.9.7.1/beep/playback.c bmp-0.9.7.1.patched/beep/playback.c --- bmp-0.9.7.1/beep/playback.c 2005-01-26 06:56:15.000000000 +0100 +++ bmp-0.9.7.1.patched/beep/playback.c 2005-11-25 00:03:59.000000000 +0100 @@ -89,7 +89,7 @@ return; if (bmp_playback_get_playing()) - bmp_playback_stop(); + bmp_playback_stop_for_restart(); vis_clear_data(mainwin_vis); vis_clear_data(playlistwin_vis); @@ -135,6 +135,15 @@ get_current_input_plugin()->pause(ip_data.paused); } +gboolean input_stopped_for_restart = FALSE; +void +bmp_playback_stop_for_restart(void) +{ + input_stopped_for_restart = TRUE; + bmp_playback_stop(); + input_stopped_for_restart = FALSE; +} + void bmp_playback_stop(void) { diff -ur bmp-0.9.7.1/beep/playback.h bmp-0.9.7.1.patched/beep/playback.h --- bmp-0.9.7.1/beep/playback.h 2004-12-04 10:04:26.000000000 +0100 +++ bmp-0.9.7.1.patched/beep/playback.h 2005-11-25 00:03:59.000000000 +0100 @@ -26,6 +26,7 @@ void bmp_playback_initiate(void); void bmp_playback_pause(void); void bmp_playback_stop(void); +void bmp_playback_stop_for_restart(void); gboolean bmp_playback_play_file(const gchar * filename); gboolean bmp_playback_get_playing(void); gboolean bmp_playback_get_paused(void); diff -ur bmp-0.9.7.1/beep/playlist.c bmp-0.9.7.1.patched/beep/playlist.c --- bmp-0.9.7.1/beep/playlist.c 2005-08-11 09:25:51.000000000 +0200 +++ bmp-0.9.7.1.patched/beep/playlist.c 2005-11-25 00:03:59.000000000 +0100 @@ -817,7 +817,7 @@ if (bmp_playback_get_playing()) { /* We need to stop before changing playlist_position */ PLAYLIST_UNLOCK(); - bmp_playback_stop(); + bmp_playback_stop_for_restart(); PLAYLIST_LOCK(); restart_playing = TRUE; } @@ -868,7 +868,7 @@ if (bmp_playback_get_playing()) { /* We need to stop before changing playlist_position */ PLAYLIST_UNLOCK(); - bmp_playback_stop(); + bmp_playback_stop_for_restart(); PLAYLIST_LOCK(); restart_playing = TRUE; } @@ -1018,7 +1018,7 @@ if (bmp_playback_get_playing()) { /* We need to stop before changing playlist_position */ PLAYLIST_UNLOCK(); - bmp_playback_stop(); + bmp_playback_stop_for_restart(); PLAYLIST_LOCK(); restart_playing = TRUE; } @@ -1047,7 +1047,10 @@ { GList *plist_pos_list; - bmp_playback_stop(); + if (cfg.repeat) + bmp_playback_stop_for_restart(); + else + bmp_playback_stop(); PLAYLIST_LOCK(); plist_pos_list = find_playlist_position_list();