Mercurial > emacs
changeset 101739:6e5d03f673c7
* 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.
author | Adrian Robert <Adrian.B.Robert@gmail.com> |
---|---|
date | Sun, 01 Feb 2009 16:32:00 +0000 |
parents | 52c300f51de8 |
children | 90b1877630e7 |
files | src/ChangeLog src/blockinput.h src/nsterm.m |
diffstat | 3 files changed, 31 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sun Feb 01 16:25:50 2009 +0000 +++ b/src/ChangeLog Sun Feb 01 16:32:00 2009 +0000 @@ -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
--- a/src/blockinput.h Sun Feb 01 16:25:50 2009 +0000 +++ b/src/blockinput.h Sun Feb 01 16:32:00 2009 +0000 @@ -59,15 +59,6 @@ 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 @@ } \ while (0) -#endif /* defined HAVE_NS && !defined COCOA_EXPERIMENTAL_CTRL_G */ - #define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT /* In critical section ? */
--- a/src/nsterm.m Sun Feb 01 16:25:50 2009 +0000 +++ b/src/nsterm.m Sun Feb 01 16:32:00 2009 +0000 @@ -3131,15 +3131,22 @@ 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 @@ 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 @@ --handling_signal; #endif UNBLOCK_INPUT; + return nevents; } @@ -3267,9 +3275,13 @@ 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;