diff --git a/DOCS/tech/slave.txt b/DOCS/tech/slave.txt index 2ad276defd..df23826c3c 100644 --- a/DOCS/tech/slave.txt +++ b/DOCS/tech/slave.txt @@ -30,6 +30,8 @@ As a temporary hack, there is also the _experimental_ "pausing_keep_force " prefix, with which MPlayer will not exit the pause loop at all. Like this you can avoid the "frame stepping" effect of "pausing_keep " but most commands will either not work at all or behave in unexpected ways. +For "set_mouse_pos" and "key_down_event", "pausing_keep_force" is the default +since other values do not make much sense for them. Available commands ('mplayer -input cmdlist' will print a list): diff --git a/input/input.c b/input/input.c index dcbeb2b11d..a12dd27958 100644 --- a/input/input.c +++ b/input/input.c @@ -767,7 +767,7 @@ int mp_input_parse_and_queue_cmds(const char *str) { mp_cmd_t* mp_input_parse_cmd(char* str) { int i,l; - int pausing = 0; + int pausing = -1; char *ptr,*e; mp_cmd_t *cmd; const mp_cmd_t *cmd_def; @@ -817,6 +817,15 @@ mp_input_parse_cmd(char* str) { cmd = calloc(1, sizeof(mp_cmd_t)); cmd->id = cmd_def->id; cmd->name = strdup(cmd_def->name); + if (pausing == -1) { + switch (cmd->id) { + case MP_CMD_KEYDOWN_EVENTS: + case MP_CMD_SET_MOUSE_POS: + pausing = 4; break; + default: + pausing = 0; break; + } + } cmd->pausing = pausing; ptr = str; diff --git a/mplayer.c b/mplayer.c index 1b6a35025b..81fc389ae0 100644 --- a/mplayer.c +++ b/mplayer.c @@ -2346,8 +2346,7 @@ static void pause_loop(void) if (mpctx->audio_out && mpctx->sh_audio) mpctx->audio_out->pause(); // pause audio, keep data if possible - while ( (cmd = mp_input_get_cmd(20, 1, 1)) == NULL - || cmd->id == MP_CMD_SET_MOUSE_POS || cmd->pausing == 4) { + while ( (cmd = mp_input_get_cmd(20, 1, 1)) == NULL || cmd->pausing == 4) { if (cmd) { cmd = mp_input_get_cmd(0,1,0); run_command(mpctx, cmd);