X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Flirc.c;h=965037bd23f94e8304b85278f4ecbce236b05001;hb=373736315529f8b760df043a21ee7526941c8bea;hp=4e67508087ed92066b59d0d31f9a34dbf057b0e8;hpb=8ba6b8463c9b53bcd6b05574d639eb9ac099a37a;p=ncmpc.git diff --git a/src/lirc.c b/src/lirc.c index 4e67508..965037b 100644 --- a/src/lirc.c +++ b/src/lirc.c @@ -1,5 +1,5 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2010 The Music Player Daemon Project + * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify @@ -17,38 +17,19 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include #include "lirc.h" #include "ncmpc.h" +#include "Compiler.h" -static struct lirc_config *lc = NULL; - -int ncmpc_lirc_open() -{ - char prog[] = "ncmpc"; - int lirc_socket = 0; - - if ((lirc_socket = lirc_init(prog, 0)) == -1) - return -1; - - if (lirc_readconfig(NULL, &lc, NULL)) { - lirc_deinit(); - return -1; - } +#include - return lirc_socket; -} +#include -void ncmpc_lirc_close() -{ - if (lc) - lirc_freeconfig(lc); - lirc_deinit(); -} +static struct lirc_config *lc = NULL; -gboolean -lirc_event(G_GNUC_UNUSED GIOChannel *source, - G_GNUC_UNUSED GIOCondition condition, G_GNUC_UNUSED gpointer data) +static gboolean +lirc_event(gcc_unused GIOChannel *source, + gcc_unused GIOCondition condition, gcc_unused gpointer data) { char *code, *txt; command_t cmd; @@ -58,7 +39,7 @@ lirc_event(G_GNUC_UNUSED GIOChannel *source, 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) + if (!do_input_event(cmd)) return FALSE; } } @@ -66,3 +47,30 @@ lirc_event(G_GNUC_UNUSED GIOChannel *source, end_input_event(); return TRUE; } + +void +ncmpc_lirc_init() +{ + char prog[] = "ncmpc"; + int lirc_socket = 0; + + if ((lirc_socket = lirc_init(prog, 0)) == -1) + return; + + if (lirc_readconfig(NULL, &lc, NULL)) { + lirc_deinit(); + return; + } + + GIOChannel *channel = g_io_channel_unix_new(lirc_socket); + g_io_add_watch(channel, G_IO_IN, lirc_event, NULL); + g_io_channel_unref(channel); +} + +void +ncmpc_lirc_deinit() +{ + if (lc) + lirc_freeconfig(lc); + lirc_deinit(); +}