From fc422f5aebbfe6dd2ea12b92fe9b13ba5fd65041 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 23 Jun 2013 01:28:28 +0200 Subject: command: add commands to enable/disable input sections For now, it's mostly for testing. It also might allow to create key binding state machines, but this sounds questionable. --- DOCS/man/en/input.rst | 15 +++++++++++++++ core/command.c | 9 +++++++++ core/input/input.c | 7 +++++++ core/input/input.h | 3 +++ 4 files changed, 34 insertions(+) diff --git a/DOCS/man/en/input.rst b/DOCS/man/en/input.rst index e904e0b86b..d57d686184 100644 --- a/DOCS/man/en/input.rst +++ b/DOCS/man/en/input.rst @@ -266,6 +266,21 @@ vf set|add|toggle|del "filter1=params,filter2,..." - ``b vf set ""`` remove all video filters on ``b`` - ``c vf toggle lavfi=gradfun`` toggle debanding on ``c`` +enable_section "
" [default|exclusive] + Enable all key bindings in the named input section. + + The enabled input sections form a stack. Bindings in sections on the top of + the stack are preferred to lower sections. This command puts the section + on top of the stack. If the section was already on the stack, it's + implicitly removed beforehand. (A section can't be on the stack twice.) + + If ``exclusive`` is specified as second argument, all sections below the + newly enabled section are disabled. They will be re-enabled as soon as + all exclusive above them are removed. + +disable_section "
" + Disable the named input section. Undoes ``enable_section``. + Undocumented commands: tv_start_scan, tv_step_channel, tv_step_norm, tv_step_chanlist, tv_set_channel, tv_last_channel, tv_set_freq, tv_step_freq, tv_set_norm, dvb_set_channel, radio_step_channel, radio_set_channel, diff --git a/core/command.c b/core/command.c index 9e77436a95..9c56b412fd 100644 --- a/core/command.c +++ b/core/command.c @@ -2412,6 +2412,15 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd) mplayer_put_key(mpctx->key_fifo, cmd->args[0].v.i); break; + case MP_CMD_ENABLE_INPUT_SECTION: + mp_input_enable_section(mpctx->input, cmd->args[0].v.s, + cmd->args[1].v.i == 1 ? MP_INPUT_EXCLUSIVE : 0); + break; + + case MP_CMD_DISABLE_INPUT_SECTION: + mp_input_disable_section(mpctx->input, cmd->args[0].v.s); + break; + case MP_CMD_VO_CMDLINE: if (mpctx->video_out) { char *s = cmd->args[0].v.s; diff --git a/core/input/input.c b/core/input/input.c index b883974409..5b9a31866c 100644 --- a/core/input/input.c +++ b/core/input/input.c @@ -194,6 +194,13 @@ static const mp_cmd_t mp_cmds[] = { .v.f = 1 }, }}, + { MP_CMD_ENABLE_INPUT_SECTION, "enable_section", { + ARG_STRING, + OARG_CHOICE(0, ({"default", 0}, + {"exclusive", 1})), + }}, + { MP_CMD_DISABLE_INPUT_SECTION, "disable_section", { ARG_STRING } }, + { MP_CMD_AF_SWITCH, "af_switch", { ARG_STRING } }, { MP_CMD_AF_ADD, "af_add", { ARG_STRING } }, { MP_CMD_AF_DEL, "af_del", { ARG_STRING } }, diff --git a/core/input/input.h b/core/input/input.h index 26b529bfb9..551ba80db6 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -67,6 +67,9 @@ enum mp_command_type { MP_CMD_TV_START_SCAN, MP_CMD_STOP, + MP_CMD_ENABLE_INPUT_SECTION, + MP_CMD_DISABLE_INPUT_SECTION, + /// DVB commands MP_CMD_DVB_SET_CHANNEL = 5101, -- cgit v1.2.3