From: Thomas Jansen Date: Mon, 10 Nov 2008 13:13:46 +0000 (+0100) Subject: lirc: refactored event handler X-Git-Tag: v0.12_alpha1~15 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=65804e73eaed005b0f8114e5c6f03fa59341a2bc;p=ncmpc.git lirc: refactored event handler * moved lirc_event to lirc.c and split out the parts that depend on variables in main.c into three separate functions * changed keyboard_event accordingly to avoid duplicate code * merged lirc_event with ncmpc_lirc_get_command --- diff --git a/src/lirc.c b/src/lirc.c index 4e7e423..aeb8665 100644 --- a/src/lirc.c +++ b/src/lirc.c @@ -1,12 +1,13 @@ #include #include "lirc.h" +#include "ncmpc.h" static struct lirc_config *lc = NULL; -static int lirc_socket = 0; int ncmpc_lirc_open() { char prog[] = "ncmpc"; + int lirc_socket = 0; if ((lirc_socket = lirc_init(prog, 0)) == -1) return -1; @@ -26,18 +27,23 @@ void ncmpc_lirc_close() lirc_deinit(); } -command_t ncmpc_lirc_get_command() +gboolean +lirc_event(mpd_unused GIOChannel *source, + mpd_unused GIOCondition condition, mpd_unused gpointer data) { - char *code = NULL, *cmd = NULL; + char *code, *txt; + command_t cmd; - if (lirc_nextcode(&code) != 0) - return CMD_NONE; + begin_input_event(); - if (lirc_code2char(lc, code, &cmd) != 0) - return CMD_NONE; - - if (!cmd) - return CMD_NONE; + if (lirc_nextcode(&code) == 0) { + while (lirc_code2char(lc, code, &txt) == 0 && txt != NULL) { + cmd = get_key_command_from_name(txt); + if (do_input_event(cmd) != 0) + return FALSE; + } + } - return get_key_command_from_name(cmd); + end_input_event(); + return TRUE; } diff --git a/src/lirc.h b/src/lirc.h index 9359898..a3045a2 100644 --- a/src/lirc.h +++ b/src/lirc.h @@ -2,9 +2,12 @@ #define LIRC_H #include "command.h" +#include int ncmpc_lirc_open(void); void ncmpc_lirc_close(void); -command_t ncmpc_lirc_get_command(void); + +gboolean +lirc_event(GIOChannel *source, GIOCondition condition, gpointer data); #endif diff --git a/src/main.c b/src/main.c index b9fb3cd..26ab458 100644 --- a/src/main.c +++ b/src/main.c @@ -282,71 +282,54 @@ timer_idle(mpd_unused gpointer data) return TRUE; } -static gboolean -keyboard_event(mpd_unused GIOChannel *source, - mpd_unused GIOCondition condition, mpd_unused gpointer data) +void begin_input_event(void) { - command_t cmd; - /* remove the idle timeout; add it later with fresh interval */ g_source_remove(idle_source_id); +} - if ((cmd=get_keyboard_command()) != CMD_NONE) { - if (cmd == CMD_QUIT) { - g_main_loop_quit(main_loop); - return FALSE; - } +void end_input_event(void) +{ + screen_update(mpd); - screen_cmd(mpd, cmd); + idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL); +} - if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) { - /* make sure we dont update the volume yet */ - g_source_remove(update_source_id); - update_source_id = g_timeout_add(update_interval, - timer_mpd_update, - GINT_TO_POINTER(TRUE)); - } +int do_input_event(command_t cmd) +{ + if (cmd == CMD_QUIT) { + g_main_loop_quit(main_loop); + return -1; } - screen_update(mpd); + screen_cmd(mpd, cmd); - idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL); - return TRUE; + if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) { + /* make sure we dont update the volume yet */ + g_source_remove(update_source_id); + update_source_id = g_timeout_add(update_interval, + timer_mpd_update, + GINT_TO_POINTER(TRUE)); + } + + return 0; } -#ifdef ENABLE_LIRC static gboolean -lirc_event(mpd_unused GIOChannel *source, - mpd_unused GIOCondition condition, mpd_unused gpointer data) +keyboard_event(mpd_unused GIOChannel *source, + mpd_unused GIOCondition condition, mpd_unused gpointer data) { command_t cmd; - /* remove the idle timeout; add it later with fresh interval */ - g_source_remove(idle_source_id); + begin_input_event(); - if ((cmd = ncmpc_lirc_get_command()) != CMD_NONE) { - if (cmd == CMD_QUIT) { - g_main_loop_quit(main_loop); + if ((cmd=get_keyboard_command()) != CMD_NONE) + if (do_input_event(cmd) != 0) return FALSE; - } - screen_cmd(mpd, cmd); - - if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) { - /* make sure we dont update the volume yet */ - g_source_remove(update_source_id); - update_source_id = g_timeout_add(update_interval, - timer_mpd_update, - GINT_TO_POINTER(TRUE)); - } - } - - screen_update(mpd); - - idle_source_id = g_timeout_add(idle_interval, timer_idle, NULL); + end_input_event(); return TRUE; } -#endif #ifndef NCMPC_MINI /** diff --git a/src/ncmpc.h b/src/ncmpc.h index 6748c77..9e4703b 100644 --- a/src/ncmpc.h +++ b/src/ncmpc.h @@ -1,7 +1,13 @@ #ifndef NCMPC_H #define NCMPC_H +#include "command.h" + void sigstop(void); +void begin_input_event(void); +void end_input_event(void); +int do_input_event(command_t cmd); + #endif /* NCMPC_H */