diff options
author | Miles Bader <miles@gnu.org> | 2007-05-20 23:29:14 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-05-20 23:29:14 +0000 |
commit | 7be1c21aedb2f8e7b7831d494e065a31afe13146 (patch) | |
tree | a998f949002bf05307fe6b59969e6ebfb0c88b8d /src/process.c | |
parent | 3c28868aeb2d445830019837294e96f432456754 (diff) | |
parent | 26114bc08f03789f30f0acca925955f2139df690 (diff) | |
download | emacs-7be1c21aedb2f8e7b7831d494e065a31afe13146.tar.gz emacs-7be1c21aedb2f8e7b7831d494e065a31afe13146.tar.bz2 emacs-7be1c21aedb2f8e7b7831d494e065a31afe13146.zip |
Merged from emacs--devo--0
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-744
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-745
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-746
Merge from emacs--rel--22
* emacs@sv.gnu.org/emacs--devo--0--patch-747
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-748
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-749
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-750
Merge from emacs--rel--22
* emacs@sv.gnu.org/emacs--devo--0--patch-751
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-752
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-753
Merge from emacs--rel--22
* emacs@sv.gnu.org/emacs--devo--0--patch-754
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-755
Merge from emacs--rel--22
* emacs@sv.gnu.org/emacs--devo--0--patch-756
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-757
Update from CVS: lisp/textmodes/sgml-mode.el: Revert last change.
* emacs@sv.gnu.org/emacs--devo--0--patch-758
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-759
Merge from emacs--rel--22
* emacs@sv.gnu.org/emacs--devo--0--patch-760
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-761
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-14
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-15
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-16
Update from CVS: src/xterm.c (XTread_socket): Revert last change.
* emacs@sv.gnu.org/emacs--rel--22--patch-17
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-18
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-19
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-20
Update from CVS
* emacs@sv.gnu.org/emacs--rel--22--patch-21
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-221
Update from CVS
Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-12
Creator: Karoly Lorentey <karoly@lorentey.hu>
Diffstat (limited to 'src/process.c')
-rw-r--r-- | src/process.c | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/process.c b/src/process.c index bd12f3e1a68..9a7cf29963f 100644 --- a/src/process.c +++ b/src/process.c @@ -336,6 +336,10 @@ static SELECT_TYPE non_keyboard_wait_mask; static SELECT_TYPE non_process_wait_mask; +/* Mask for the gpm mouse input descriptor. */ + +static SELECT_TYPE gpm_wait_mask; + #ifdef NON_BLOCKING_CONNECT /* Mask of bits indicating the descriptors that we wait for connect to complete on. Once they complete, they are removed from this mask @@ -357,6 +361,9 @@ static int max_process_desc; /* The largest descriptor currently in use for keyboard input. */ static int max_keyboard_desc; +/* The largest descriptor currently in use for gpm mouse input. */ +static int max_gpm_desc; + /* Nonzero means delete a process right away if it exits. */ static int delete_exited_processes; @@ -4451,7 +4458,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display, IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask); EMACS_SET_SECS_USECS (timeout, 0, 0); - if ((select (max (max_process_desc, max_keyboard_desc) + 1, + if ((select (max (max (max_process_desc, max_keyboard_desc), + max_gpm_desc) + 1, &Atemp, #ifdef NON_BLOCKING_CONNECT (num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0), @@ -4596,7 +4604,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display, } #endif - nfds = select (max (max_process_desc, max_keyboard_desc) + 1, + nfds = select (max (max (max_process_desc, max_keyboard_desc), + max_gpm_desc) + 1, &Available, #ifdef NON_BLOCKING_CONNECT (check_connect ? &Connecting : (SELECT_TYPE *)0), @@ -6975,6 +6984,21 @@ add_keyboard_wait_descriptor (desc) max_keyboard_desc = desc; } +static int add_gpm_wait_descriptor_called_flag; + +void +add_gpm_wait_descriptor (desc) + int desc; +{ + if (! add_gpm_wait_descriptor_called_flag) + FD_CLR (0, &input_wait_mask); + add_gpm_wait_descriptor_called_flag = 1; + FD_SET (desc, &input_wait_mask); + FD_SET (desc, &gpm_wait_mask); + if (desc > max_gpm_desc) + max_gpm_desc = desc; +} + /* From now on, do not expect DESC to give keyboard input. */ void @@ -6990,10 +7014,29 @@ delete_keyboard_wait_descriptor (desc) if (desc == max_keyboard_desc) for (fd = 0; fd < lim; fd++) if (FD_ISSET (fd, &input_wait_mask) - && !FD_ISSET (fd, &non_keyboard_wait_mask)) + && !FD_ISSET (fd, &non_keyboard_wait_mask) + && !FD_ISSET (fd, &gpm_wait_mask)) max_keyboard_desc = fd; } +void +delete_gpm_wait_descriptor (desc) + int desc; +{ + int fd; + int lim = max_gpm_desc; + + FD_CLR (desc, &input_wait_mask); + FD_CLR (desc, &non_process_wait_mask); + + if (desc == max_gpm_desc) + for (fd = 0; fd < lim; fd++) + if (FD_ISSET (fd, &input_wait_mask) + && !FD_ISSET (fd, &non_keyboard_wait_mask) + && !FD_ISSET (fd, &non_process_wait_mask)) + max_gpm_desc = fd; +} + /* Return nonzero if *MASK has a bit set that corresponds to one of the keyboard input descriptors. */ |