/* NeXT/Open/GNUstep / MacOSX communication module.
-Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2012
- Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-1994, 2005-2006, 2008-2013 Free Software
+Foundation, Inc.
This file is part of GNU Emacs.
/* event loop */
static BOOL send_appdefined = YES;
-static NSEvent *last_appdefined_event = 0;
+#define NO_APPDEFINED_DATA (-8)
+static int last_appdefined_event_data = NO_APPDEFINED_DATA;
static NSTimer *timed_entry = 0;
static NSTimer *scroll_repeat_entry = nil;
static fd_set select_readfds, select_writefds;
}
hold_event_q.q[hold_event_q.nr++] = *event;
+ /* Make sure ns_read_socket is called, i.e. we have input. */
+ kill (0, SIGIO);
+ send_appdefined = YES;
}
static Lisp_Object
-------------------------------------------------------------------------- */
{
int result;
- NSEvent *ev;
- int k, nr = 0;
+ int t, k, nr = 0;
struct input_event event;
char c;
/* NSTRACE (ns_select); */
- for (k = 0; readfds && k < nfds+1; k++)
- if (FD_ISSET(k, readfds)) ++nr;
+ if (hold_event_q.nr > 0)
+ {
+ /* We already have events pending. */
+ kill (0, SIGIO);
+ errno = EINTR;
+ return -1;
+ }
+
+ for (k = 0; k < nfds+1; k++)
+ {
+ if (readfds && FD_ISSET(k, readfds)) ++nr;
+ if (writefds && FD_ISSET(k, writefds)) ++nr;
+ }
if (NSApp == nil
|| (timeout && timeout->tv_sec == 0 && timeout->tv_nsec == 0))
}
unblock_input ();
- ev = last_appdefined_event;
+ t = last_appdefined_event_data;
- if (ev)
+ if (t != NO_APPDEFINED_DATA)
{
- int t;
- if ([ev type] != NSApplicationDefined)
- emacs_abort ();
-
- t = [ev data1];
- last_appdefined_event = 0;
+ last_appdefined_event_data = NO_APPDEFINED_DATA;
if (t == -2)
{
modal loop. Just defer it until later. */
if ([NSApp modalWindow] == nil)
{
- last_appdefined_event = theEvent;
+ last_appdefined_event_data = [theEvent data1];
[self stop: self];
}
else
if (waiting)
{
SELECT_TYPE fds;
-
+ FD_ZERO (&fds);
FD_SET (selfds[0], &fds);
result = select (selfds[0]+1, &fds, NULL, NULL, NULL);
if (result > 0)