From 6cf4e5d6f677c1a03076b16d6c265c7b0d9711d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20Dj=C3=A4rv?= Date: Mon, 26 May 2014 13:16:47 +0200 Subject: [PATCH] * nsfns.m (ns_do_applescript): Surround executeAndReturnError with calls to ns_init_events, ns_finish_events. * nsterm.h (ns_init_events, ns_finish_events): Declare. * nsterm.m (ns_init_events, ns_finish_events): New functions. (ns_read_socket, ns_select): Call ns_init_events, ns_finish_events. Fixes: debbugs:17424 --- src/ChangeLog | 10 ++++++++++ src/nsfns.m | 3 ++- src/nsterm.h | 3 +++ src/nsterm.m | 24 ++++++++++++++++++------ 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 76117451b16..06f3a9403e3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2014-05-26 Jan Djärv + + * nsterm.h (ns_init_events, ns_finish_events): Declare. + + * nsterm.m (ns_init_events, ns_finish_events): New functions. + (ns_read_socket, ns_select): Call ns_init_events, ns_finish_events. + + * nsfns.m (ns_do_applescript): Surround executeAndReturnError + with calls to ns_init_events, ns_finish_events (Bug#17424). + 2014-05-26 Eli Zaretskii * xdisp.c (move_it_in_display_line_to): Don't record wrap position diff --git a/src/nsfns.m b/src/nsfns.m index 4c3f7f34c07..0f2c2e693f7 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2094,9 +2094,10 @@ ns_do_applescript (Lisp_Object script, Lisp_Object *result) [[NSAppleScript alloc] initWithSource: [NSString stringWithUTF8String: SSDATA (script)]]; + ns_init_events (); returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; [scriptObject release]; - + ns_finish_events (); *result = Qnil; if (returnDescriptor != NULL) diff --git a/src/nsterm.h b/src/nsterm.h index 74789634a90..49dd9d79008 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -896,6 +896,9 @@ extern int ns_select (int nfds, fd_set *readfds, fd_set *writefds, extern unsigned long ns_get_rgb_color (struct frame *f, float r, float g, float b, float a); +extern void ns_init_events (); +extern void ns_finish_events (); + /* From nsterm.m, needed in nsfont.m. */ #ifdef __OBJC__ extern void diff --git a/src/nsterm.m b/src/nsterm.m index 059ae6d0cd6..ba94d28b797 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -396,6 +396,19 @@ void x_set_frame_alpha (struct frame *f); ========================================================================== */ +void +ns_init_events (struct input_event* ev) +{ + EVENT_INIT (*ev); + emacs_event = ev; +} + +void +ns_finish_events () +{ + emacs_event = NULL; +} + static void hold_event (struct input_event *event) { @@ -3606,8 +3619,7 @@ ns_read_socket (struct terminal *terminal, struct input_event *hold_quit) block_input (); n_emacs_events_pending = 0; - EVENT_INIT (ev); - emacs_event = &ev; + ns_init_events (&ev); q_event_ptr = hold_quit; /* we manage autorelease pools by allocate/reallocate each time around @@ -3648,7 +3660,8 @@ ns_read_socket (struct terminal *terminal, struct input_event *hold_quit) nevents = n_emacs_events_pending; n_emacs_events_pending = 0; - emacs_event = q_event_ptr = NULL; + ns_finish_events (); + q_event_ptr = NULL; unblock_input (); return nevents; @@ -3743,16 +3756,15 @@ ns_select (int nfds, fd_set *readfds, fd_set *writefds, ns_send_appdefined (-1); } - EVENT_INIT (event); block_input (); - emacs_event = &event; + ns_init_events (&event); if (++apploopnr != 1) { emacs_abort (); } [NSApp run]; --apploopnr; - emacs_event = NULL; + ns_finish_events (); if (nr > 0 && readfds) { c = 's'; -- 2.39.2