mirror of
https://github.com/mpv-player/mpv
synced 2024-12-23 23:32:26 +00:00
terminal: process input when foregrounded
When mpv is in the background because it was started with `mpv foo.mp3 &`, or the user did ctrl+z bg, and is then brought to the foreground with fg, it buffers input until you press enter. This makes it accept input almost immediately. Having a short interval isn't important, since input is buffered until the next loop iteration. Closes #8120.
This commit is contained in:
parent
fa7afc3e19
commit
9867f21830
@ -45,6 +45,14 @@
|
||||
// Timeout in ms after which the (normally ambiguous) ESC key is detected.
|
||||
#define ESC_TIMEOUT 100
|
||||
|
||||
// Timeout in ms after which the poll for input is aborted. The FG/BG state is
|
||||
// tested before every wait, and a positive value allows reactivating input
|
||||
// processing when mpv is brought to the foreground while it was running in the
|
||||
// background. In such a situation, an infinite timeout (-1) will keep mpv
|
||||
// waiting for input without realizing the terminal state changed - and thus
|
||||
// buffer all keypresses until ENTER is pressed.
|
||||
#define INPUT_TIMEOUT 1000
|
||||
|
||||
static volatile struct termios tio_orig;
|
||||
static volatile int tio_orig_set;
|
||||
|
||||
@ -397,7 +405,7 @@ static void *terminal_thread(void *ptr)
|
||||
{ .events = POLLIN, .fd = death_pipe[0] },
|
||||
{ .events = POLLIN, .fd = tty_in }
|
||||
};
|
||||
int r = polldev(fds, stdin_ok ? 2 : 1, buf.len ? ESC_TIMEOUT : -1);
|
||||
int r = polldev(fds, stdin_ok ? 2 : 1, buf.len ? ESC_TIMEOUT : INPUT_TIMEOUT);
|
||||
if (fds[0].revents)
|
||||
break;
|
||||
if (fds[1].revents) {
|
||||
|
Loading…
Reference in New Issue
Block a user