* nsterm.m (ns_read_socket): Copy 2009-01-29 and 2009-01-30
XT,w32read_socket changes to ns_read_socket. * keyboard.c (handle_interrupt): Don't call quit_throw_to_read_char() under NS. * blockinput.h: Remove NS-specific code.
This commit is contained in:
parent
8d5b898206
commit
8ad093db01
4 changed files with 41 additions and 23 deletions
|
@ -1,3 +1,11 @@
|
|||
2009-02-01 Adrian Robert <Adrian.B.Robert@gmail.com>
|
||||
|
||||
* nsterm.m (ns_read_socket): Copy 2009-01-29 and 2009-01-30
|
||||
XT,w32read_socket changes to ns_read_socket.
|
||||
* keyboard.c (handle_interrupt): Don't call
|
||||
quit_throw_to_read_char() under NS.
|
||||
* blockinput.h: Remove NS-specific code.
|
||||
|
||||
2009-01-30 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* dispnew.c (window_change_signal): Don't try to get the size of a
|
||||
|
|
|
@ -59,15 +59,6 @@ extern int interrupt_input_pending;
|
|||
|
||||
extern int pending_atimers;
|
||||
|
||||
#if defined (HAVE_NS) && !defined (COCOA_EXPERIMENTAL_CTRL_G)
|
||||
/* NS does not use interrupt-driven input processing (yet), so this is
|
||||
unneeded and moreover was causing problems. */
|
||||
#define BLOCK_INPUT
|
||||
#define UNBLOCK_INPUT
|
||||
#define TOTALLY_UNBLOCK_INPUT
|
||||
#define UNBLOCK_INPUT_TO(LEVEL)
|
||||
|
||||
#else
|
||||
|
||||
/* Begin critical section. */
|
||||
#define BLOCK_INPUT (interrupt_input_blocked++)
|
||||
|
@ -125,8 +116,6 @@ extern int pending_atimers;
|
|||
} \
|
||||
while (0)
|
||||
|
||||
#endif /* defined HAVE_NS && !defined COCOA_EXPERIMENTAL_CTRL_G */
|
||||
|
||||
#define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
|
||||
|
||||
/* In critical section ? */
|
||||
|
|
|
@ -11125,8 +11125,17 @@ handle_interrupt ()
|
|||
Vquit_flag = Qt;
|
||||
}
|
||||
|
||||
/* TODO: The longjmp in this call throws the NS event loop integration off,
|
||||
and it seems to do fine without this. Probably some attention
|
||||
needs to be paid to the setting of waiting_for_input in
|
||||
wait_reading_process_output() under HAVE_NS because of the call
|
||||
to ns_select there (needed because otherwise events aren't picked up
|
||||
outside of polling since we don't get SIGIO like X and we don't have a
|
||||
separate event loop thread like W32. */
|
||||
#ifndef HAVE_NS
|
||||
if (waiting_for_input && !echoing)
|
||||
quit_throw_to_read_char ();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Handle a C-g by making read_char return C-g. */
|
||||
|
@ -11183,7 +11192,7 @@ See also `current-input-mode'. */)
|
|||
#endif /* NO_SOCK_SIGIO */
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif /* HAVE_X_WINDOWS */
|
||||
new_interrupt_input = !NILP (interrupt);
|
||||
#else /* not SIGIO */
|
||||
new_interrupt_input = 0;
|
||||
|
|
34
src/nsterm.m
34
src/nsterm.m
|
@ -3131,15 +3131,22 @@ overwriting cursor (usually when cursor on a tab) */
|
|||
struct input_event ev;
|
||||
int nevents;
|
||||
static NSDate *lastCheck = nil;
|
||||
|
||||
/* NSTRACE (ns_read_socket); */
|
||||
|
||||
if (interrupt_input_blocked)
|
||||
{
|
||||
interrupt_input_pending = 1;
|
||||
#ifdef SYNC_INPUT
|
||||
pending_signals = 1;
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
interrupt_input_pending = 0;
|
||||
#ifdef SYNC_INPUT
|
||||
pending_signals = pending_atimers;
|
||||
#endif
|
||||
BLOCK_INPUT;
|
||||
|
||||
#ifdef COCOA_EXPERIMENTAL_CTRL_G
|
||||
|
@ -3181,15 +3188,15 @@ it IS actually called from signal handler (which is only the case
|
|||
to ourself, otherwise [NXApp run] will never exit. */
|
||||
send_appdefined = YES;
|
||||
|
||||
/* TODO: from termhooks.h: */
|
||||
/* XXX Please note that a non-zero value of EXPECTED only means that
|
||||
there is available input on at least one of the currently opened
|
||||
terminal devices -- but not necessarily on this device.
|
||||
Therefore, in most cases EXPECTED should be simply ignored. */
|
||||
/* However, if in ns_select, this is called from gobble_input, which
|
||||
appears to set it correctly for our purposes, and always assuming
|
||||
!expected causes 100% CPU usage. */
|
||||
if (!inNsSelect || !expected)
|
||||
/* If called via ns_select, this is called once with expected=1,
|
||||
because we expect either the timeout or file descriptor activity.
|
||||
In this case the first event through will either be real input or
|
||||
one of these. read_avail_input() then calls once more with expected=0
|
||||
and in that case we need to return quickly if there is nothing.
|
||||
If we're being called outside of that, it's also OK to return quickly
|
||||
after one iteration through the event loop, since other terms do
|
||||
this and emacs expects it. */
|
||||
if (!(inNsSelect && expected)) // (!inNsSelect || !expected)
|
||||
{
|
||||
/* Post an application defined event on the event queue. When this is
|
||||
received the [NXApp run] will return, thus having processed all
|
||||
|
@ -3208,6 +3215,7 @@ it IS actually called from signal handler (which is only the case
|
|||
--handling_signal;
|
||||
#endif
|
||||
UNBLOCK_INPUT;
|
||||
|
||||
return nevents;
|
||||
}
|
||||
|
||||
|
@ -3267,9 +3275,13 @@ it IS actually called from signal handler (which is only the case
|
|||
retain];
|
||||
|
||||
/* Let Application dispatch events until it receives an event of the type
|
||||
NX_APPDEFINED, which should only be sent by timeout_handler. */
|
||||
NX_APPDEFINED, which should only be sent by timeout_handler.
|
||||
We tell read_avail_input() that input is "expected" because we do expect
|
||||
either the timeout or fd handler to fire, and if they don't, the original
|
||||
call from process.c that got us here expects us to wait until some input
|
||||
comes. */
|
||||
inNsSelect = 1;
|
||||
gobble_input (timeout ? 1 : 0);
|
||||
gobble_input (1);
|
||||
ev = last_appdefined_event;
|
||||
inNsSelect = 0;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue