summaryrefslogtreecommitdiff
path: root/src/process.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2007-05-20 23:29:14 +0000
committerMiles Bader <miles@gnu.org>2007-05-20 23:29:14 +0000
commit7be1c21aedb2f8e7b7831d494e065a31afe13146 (patch)
treea998f949002bf05307fe6b59969e6ebfb0c88b8d /src/process.c
parent3c28868aeb2d445830019837294e96f432456754 (diff)
parent26114bc08f03789f30f0acca925955f2139df690 (diff)
downloademacs-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.c49
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. */