143 lines
3.9 KiB
Diff
143 lines
3.9 KiB
Diff
|
|
diff -Naupr xmms-1.2.11.orig/xmms/input.c xmms-1.2.11/xmms/input.c
|
||
|
|
--- xmms-1.2.11.orig/xmms/input.c 2005-05-15 02:01:21.000000000 +0200
|
||
|
|
+++ xmms-1.2.11/xmms/input.c 2009-09-14 22:17:57.756115021 +0200
|
||
|
|
@@ -286,6 +286,14 @@ void input_seek(int time)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
+gboolean input_stopped_for_restart = FALSE; /* crossfade */
|
||
|
|
+void input_stop_for_restart() /* crossfade */
|
||
|
|
+{
|
||
|
|
+ input_stopped_for_restart = TRUE;
|
||
|
|
+ input_stop();
|
||
|
|
+ input_stopped_for_restart = FALSE;
|
||
|
|
+}
|
||
|
|
+
|
||
|
|
void input_stop(void)
|
||
|
|
{
|
||
|
|
if (ip_data->playing && get_current_input_plugin())
|
||
|
|
diff -Naupr xmms-1.2.11.orig/xmms/input.h xmms-1.2.11/xmms/input.h
|
||
|
|
--- xmms-1.2.11.orig/xmms/input.h 2000-02-16 22:05:57.000000000 +0100
|
||
|
|
+++ xmms-1.2.11/xmms/input.h 2009-09-14 22:17:57.757114619 +0200
|
||
|
|
@@ -34,6 +34,7 @@ InputVisType input_get_vis_type();
|
||
|
|
gboolean input_check_file(gchar * filename);
|
||
|
|
void input_play(char *filename);
|
||
|
|
void input_stop(void);
|
||
|
|
+void input_stop_for_restart(void);
|
||
|
|
void input_pause(void);
|
||
|
|
int input_get_time(void);
|
||
|
|
void input_set_eq(int on, float preamp, float *bands);
|
||
|
|
diff -Naupr xmms-1.2.11.orig/xmms/main.c xmms-1.2.11/xmms/main.c
|
||
|
|
--- xmms-1.2.11.orig/xmms/main.c 2006-07-16 15:40:04.000000000 +0200
|
||
|
|
+++ xmms-1.2.11/xmms/main.c 2009-09-14 22:17:57.759114418 +0200
|
||
|
|
@@ -888,8 +888,10 @@ void mainwin_shade_toggle(void)
|
||
|
|
mainwin_set_shade(!cfg.player_shaded);
|
||
|
|
}
|
||
|
|
|
||
|
|
+gboolean is_quitting = FALSE; /* crossfade */
|
||
|
|
void mainwin_quit_cb(void)
|
||
|
|
{
|
||
|
|
+ is_quitting = TRUE; /* crossfade */
|
||
|
|
input_stop();
|
||
|
|
gtk_widget_hide(equalizerwin);
|
||
|
|
gtk_widget_hide(playlistwin);
|
||
|
|
@@ -1540,7 +1542,8 @@ static void mainwin_jump_to_file_real_cb
|
||
|
|
int *pos;
|
||
|
|
|
||
|
|
if (get_input_playing())
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
+
|
||
|
|
pos = gtk_clist_get_row_data(clist, GPOINTER_TO_INT(clist->selection->data));
|
||
|
|
playlist_set_position(*pos);
|
||
|
|
playlist_play();
|
||
|
|
diff -Naupr xmms-1.2.11.orig/xmms/playlist.c xmms-1.2.11/xmms/playlist.c
|
||
|
|
--- xmms-1.2.11.orig/xmms/playlist.c 2007-11-16 22:51:30.000000000 +0100
|
||
|
|
+++ xmms-1.2.11/xmms/playlist.c 2009-09-14 22:17:57.763114547 +0200
|
||
|
|
@@ -78,9 +78,10 @@ void playlist_clear(void)
|
||
|
|
{
|
||
|
|
GList *node;
|
||
|
|
PlaylistEntry *entry;
|
||
|
|
-
|
||
|
|
+
|
||
|
|
+ /* always assume that there is another song comming up */
|
||
|
|
if (get_input_playing())
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
|
||
|
|
PL_LOCK();
|
||
|
|
if (playlist)
|
||
|
|
@@ -142,7 +143,7 @@ void playlist_delete_node(GList *node, g
|
||
|
|
if (get_input_playing())
|
||
|
|
{
|
||
|
|
PL_UNLOCK();
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
PL_LOCK();
|
||
|
|
*restart_playing = TRUE;
|
||
|
|
}
|
||
|
|
@@ -583,7 +584,7 @@ void playlist_play(void)
|
||
|
|
}
|
||
|
|
|
||
|
|
if (get_input_playing())
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
|
||
|
|
vis_clear_data(mainwin_vis);
|
||
|
|
vis_clear_data(playlistwin_vis);
|
||
|
|
@@ -681,7 +682,7 @@ void playlist_next(void)
|
||
|
|
{
|
||
|
|
/* We need to stop before changing playlist_position */
|
||
|
|
PL_UNLOCK();
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
PL_LOCK();
|
||
|
|
restart_playing = TRUE;
|
||
|
|
}
|
||
|
|
@@ -736,7 +737,7 @@ void playlist_prev(void)
|
||
|
|
{
|
||
|
|
/* We need to stop before changing playlist_position */
|
||
|
|
PL_UNLOCK();
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
PL_LOCK();
|
||
|
|
restart_playing = TRUE;
|
||
|
|
}
|
||
|
|
@@ -924,7 +925,7 @@ void playlist_set_position(int pos)
|
||
|
|
{
|
||
|
|
/* We need to stop before changing playlist_position */
|
||
|
|
PL_UNLOCK();
|
||
|
|
- input_stop();
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
PL_LOCK();
|
||
|
|
restart_playing = TRUE;
|
||
|
|
}
|
||
|
|
@@ -951,11 +952,25 @@ void playlist_set_position(int pos)
|
||
|
|
void playlist_eof_reached(void)
|
||
|
|
{
|
||
|
|
GList *plist_pos_list;
|
||
|
|
-
|
||
|
|
- input_stop();
|
||
|
|
+ gboolean stop_for_restart = TRUE;
|
||
|
|
|
||
|
|
PL_LOCK();
|
||
|
|
+
|
||
|
|
+ /*
|
||
|
|
+ * First, determine if we are going to play another song after
|
||
|
|
+ * this one and call input_stop() / input_stop_for_restart()
|
||
|
|
+ * accordingly.
|
||
|
|
+ */
|
||
|
|
plist_pos_list = find_playlist_position_list();
|
||
|
|
+ if (!queued_list && !g_list_next(plist_pos_list) && !cfg.repeat)
|
||
|
|
+ stop_for_restart = FALSE;
|
||
|
|
+
|
||
|
|
+ PL_UNLOCK();
|
||
|
|
+ if (stop_for_restart)
|
||
|
|
+ input_stop_for_restart();
|
||
|
|
+ else
|
||
|
|
+ input_stop();
|
||
|
|
+ PL_LOCK();
|
||
|
|
|
||
|
|
if (cfg.no_playlist_advance)
|
||
|
|
{
|