aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lirc.c28
-rw-r--r--src/lirc.h5
-rw-r--r--src/main.c73
-rw-r--r--src/ncmpc.h6
4 files changed, 55 insertions, 57 deletions
diff --git a/src/lirc.c b/src/lirc.c
index 4e7e423d1..aeb86650c 100644
--- a/src/lirc.c
+++ b/src/lirc.c
@@ -1,12 +1,13 @@
#include <lirc/lirc_client.h>
#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 9359898ad..a3045a206 100644
--- a/src/lirc.h
+++ b/src/lirc.h
@@ -2,9 +2,12 @@
#define LIRC_H
#include "command.h"
+#include <glib.h>
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 b9fb3cd0e..26ab45896 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 6748c779b..9e4703b57 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 */