Search
j0ke.net Open Build Service
>
Projects
>
multimedia
:
EL6
:
ffmpeg-0.11.x
>
xmms
> xmms-1.2.11-is_quitting.patch
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File xmms-1.2.11-is_quitting.patch of Package xmms
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) {