diff --git a/src/main.c b/src/main.c
index 27a3a603b0f29871a5644cfc98c26dd290045a96..214478e39ded84a53a3ac96591888e7f96c0d19c 100644 (file)
--- a/src/main.c
+++ b/src/main.c
#include "strfsong.h"
#include "i18n.h"
#include "player_command.h"
+#include "keyboard.h"
+#include "lirc.h"
#ifndef NCMPC_MINI
#include "conf.h"
#include "lyrics.h"
#endif
-#ifdef ENABLE_LIRC
-#include "lirc.h"
-#endif
-
#include <mpd/client.h>
+#ifndef WIN32
+#include <glib-unix.h>
+#endif
+
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#endif
#ifndef WIN32
-static void
-catch_sigint(gcc_unused int sig)
+static gboolean
+handle_quit_signal(gcc_unused gpointer data)
{
g_main_loop_quit(main_loop);
-}
-
-
-static void
-catch_sigcont(gcc_unused int sig)
-{
- char irrelevant = 'a';
- if (1 != write(sigwinch_pipes[1], &irrelevant, 1))
- exit(EXIT_FAILURE);
-}
-
-void
-sigstop(void)
-{
- def_prog_mode(); /* save the tty modes */
- endwin(); /* end curses mode temporarily */
- kill(0, SIGSTOP); /* issue SIGSTOP */
+ return false;
}
static gboolean
auto_update_timer();
}
-int do_input_event(command_t cmd)
+bool
+do_input_event(command_t cmd)
{
if (cmd == CMD_QUIT) {
g_main_loop_quit(main_loop);
- return -1;
+ return false;
}
screen_cmd(mpd, cmd);
/* make sure we don't update the volume yet */
disable_update_timer();
- return 0;
-}
-
-static gboolean
-keyboard_event(gcc_unused GIOChannel *source,
- gcc_unused GIOCondition condition,
- gcc_unused gpointer data)
-{
- begin_input_event();
-
- command_t cmd = get_keyboard_command();
- if (cmd != CMD_NONE)
- if (do_input_event(cmd) != 0)
- return FALSE;
-
- end_input_event();
- return TRUE;
+ return true;
}
#ifndef NCMPC_MINI
options_parse(argc, argv);
#ifndef WIN32
- /* setup signal behavior - SIGINT */
+ /* setup quit signals */
+ g_unix_signal_add(SIGTERM, handle_quit_signal, NULL);
+ g_unix_signal_add(SIGINT, handle_quit_signal, NULL);
+ g_unix_signal_add(SIGHUP, handle_quit_signal, NULL);
+
+ /* setup signal behavior - SIGCONT */
+
struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
- act.sa_handler = catch_sigint;
- if (sigaction(SIGINT, &act, NULL) < 0) {
- perror("signal");
- exit(EXIT_FAILURE);
- }
-
- /* setup signal behavior - SIGTERM */
- act.sa_handler = catch_sigint;
- if (sigaction(SIGTERM, &act, NULL) < 0) {
- perror("sigaction()");
- exit(EXIT_FAILURE);
- }
-
- /* setup signal behavior - SIGCONT */
-
- act.sa_handler = catch_sigcont;
+ act.sa_handler = catch_sigwinch;
if (sigaction(SIGCONT, &act, NULL) < 0) {
perror("sigaction(SIGCONT)");
exit(EXIT_FAILURE);
}
- /* setup signal behaviour - SIGHUP*/
-
- act.sa_handler = catch_sigint;
- if (sigaction(SIGHUP, &act, NULL) < 0) {
- perror("sigaction(SIGHUP)");
- exit(EXIT_FAILURE);
- }
-
/* setup SIGWINCH */
act.sa_flags = SA_RESTART;
main_loop = g_main_loop_new(NULL, FALSE);
/* watch out for keyboard input */
- GIOChannel *keyboard_channel = g_io_channel_unix_new(STDIN_FILENO);
- g_io_add_watch(keyboard_channel, G_IO_IN, keyboard_event, NULL);
- g_io_channel_unref(keyboard_channel);
+ keyboard_init();
-#ifdef ENABLE_LIRC
/* watch out for lirc input */
ncmpc_lirc_init();
-#endif
#ifndef WIN32
if (!pipe(sigwinch_pipes) &&
close(sigwinch_pipes[0]);
close(sigwinch_pipes[1]);
-#ifdef ENABLE_LIRC
ncmpc_lirc_deinit();
-#endif
screen_exit();
#ifndef NCMPC_MINI