diff -ru herrie-2.1-orig/herrie-2.1/src/gui_input.c herrie-2.1-signals/herrie-2.1/src/gui_input.c --- herrie-2.1-orig/herrie-2.1/src/gui_input.c 2008-07-15 10:59:07.000000000 -0500 +++ herrie-2.1-signals/herrie-2.1/src/gui_input.c 2008-07-18 09:44:41.000000000 -0500 @@ -521,6 +521,9 @@ sigset_t sset; sigemptyset(&sset); + sigaddset(&sset, SIGRTMIN+1); + sigaddset(&sset, SIGRTMIN+2); + sigaddset(&sset, SIGRTMIN+3); sigaddset(&sset, SIGUSR1); sigaddset(&sset, SIGUSR2); sigaddset(&sset, SIGHUP); @@ -545,20 +548,29 @@ if (shutting_down) return; - switch (signal) { - case SIGUSR1: - playq_cursong_pause(); - break; - case SIGUSR2: - playq_cursong_next(); - break; - case SIGHUP: - case SIGINT: - case SIGPIPE: - case SIGQUIT: - case SIGTERM: - gui_input_quit(); - g_assert_not_reached(); + if (signal == (SIGRTMIN+1)) { gui_playq_song_select(); } + else { + if (signal == (SIGRTMIN+2)) { playq_cursong_stop(); } + else { + if (signal == (SIGRTMIN+3)) { playq_cursong_prev(); } + else { + switch (signal) { + case SIGUSR1: + playq_cursong_pause(); + break; + case SIGUSR2: + playq_cursong_next(); + break; + case SIGHUP: + case SIGINT: + case SIGPIPE: + case SIGQUIT: + case SIGTERM: + gui_input_quit(); + g_assert_not_reached(); + } + } + } } } #endif /* G_OS_UNIX */ @@ -570,6 +582,9 @@ unsigned int i; #ifdef G_OS_UNIX + signal(SIGRTMIN+1, gui_input_sighandler); + signal(SIGRTMIN+2, gui_input_sighandler); + signal(SIGRTMIN+3, gui_input_sighandler); signal(SIGUSR1, gui_input_sighandler); signal(SIGUSR2, gui_input_sighandler); signal(SIGHUP, gui_input_sighandler);