diff options
author | uau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-08-25 04:28:14 +0000 |
---|---|---|
committer | uau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-08-25 04:28:14 +0000 |
commit | 95a174a65a04ada12ecda4f34f139a31dfa95540 (patch) | |
tree | fbc26f310143717c7b821f7ba87d78924f32332f | |
parent | 24802b1def3b48375a54e2fe9bbb1d19953286c8 (diff) | |
download | mpv-95a174a65a04ada12ecda4f34f139a31dfa95540.tar.bz2 mpv-95a174a65a04ada12ecda4f34f139a31dfa95540.tar.xz |
Add separate event input type for terminal+vo
Add an input/input.c fd type whose read function takes no arguments and
returns no value. If such a function reads key or command events it'll
add them to the queues itself. Use this type for terminal input which
was special-cased before. The event function for X11-based VOs will use
the same type later.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24152 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | input/input.c | 27 | ||||
-rw-r--r-- | input/input.h | 4 | ||||
-rw-r--r-- | mplayer.c | 2 |
3 files changed, 30 insertions, 3 deletions
diff --git a/input/input.c b/input/input.c index ff51e1b70c..f37da37088 100644 --- a/input/input.c +++ b/input/input.c @@ -500,6 +500,7 @@ typedef struct mp_input_fd { int dead : 1; int got_cmd : 1; int no_select : 1; + int no_readfunc_retval : 1; // These fields are for the cmd fds. char* buffer; int pos,size; @@ -665,6 +666,28 @@ mp_input_add_key_fd(int fd, int select, mp_key_func_t read_func, mp_close_func_t return 1; } +int +mp_input_add_event_fd(int fd, void (*read_func)(void)) +{ + if(num_key_fd == MP_MAX_KEY_FD) { + mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds,fd); + return 0; + } + + memset(&key_fds[num_key_fd],0,sizeof(mp_input_fd_t)); + key_fds[num_key_fd].fd = fd; + key_fds[num_key_fd].read_func = read_func; + key_fds[num_key_fd].close_func = NULL; + key_fds[num_key_fd].no_readfunc_retval = 1; + num_key_fd++; + + return 1; +} + +void mp_input_rm_event_fd(int fd) +{ + mp_input_rm_key_fd(fd); +} mp_cmd_t* @@ -1148,8 +1171,8 @@ static mp_cmd_t *read_events(int time, int paused) #endif int code; - if (key_fds[i].fd == 0) { // getch2 handler special-cased for now - getch2(); + if (key_fds[i].no_readfunc_retval) { // getch2 handler special-cased for now + ((void (*)(void))key_fds[i].read_func)(); code = mplayer_get_key(0); if (code < 0) code = MP_INPUT_NOTHING; diff --git a/input/input.h b/input/input.h index 7e5b3e83d2..469ad48713 100644 --- a/input/input.h +++ b/input/input.h @@ -230,6 +230,10 @@ mp_input_add_key_fd(int fd, int select, mp_key_func_t read_func, mp_close_func_t void mp_input_rm_key_fd(int fd); +int mp_input_add_event_fd(int fd, void (*read_func)(void)); + +void mp_input_rm_event_fd(int fd); + // This function can be used to put a command in the system again. It's used by libmpdemux // when it performs a blocking operation to resend the command it received to the main // loop. @@ -2605,7 +2605,7 @@ if(slave_mode) mp_input_add_cmd_fd(0,0,mp_input_win32_slave_cmd_func,NULL); #endif else if(!noconsolecontrols) - mp_input_add_key_fd(0,1,NULL,NULL); + mp_input_add_event_fd(0, getch2); inited_flags|=INITED_INPUT; current_module = NULL; |