diff options
author | Jan Djärv <jan.h.d@swipnet.se> | 2012-10-12 19:50:39 +0200 |
---|---|---|
committer | Jan Djärv <jan.h.d@swipnet.se> | 2012-10-12 19:50:39 +0200 |
commit | 167e3640f16a3825f6189111caf86a743e5282e5 (patch) | |
tree | bb181f0246ce672d9e8b3c552349011feede653c | |
parent | c40239dff913de4a404f97568a755deb2086db76 (diff) | |
download | emacs-167e3640f16a3825f6189111caf86a743e5282e5.tar.gz |
* nsterm.m (hold_event_q): New static variable.
(EV_TRAILER, sendScrollEventAtLoc:fromEvent:): Call hold_event if
! q_event_ptr.
(hold_event): New function.
(ns_read_socket): If hold_event_q have events, store them and
return.
(setPosition:portion:whole:): Send SIGIO to ourselves if apploopnr
is zero (Bug#12384).
-rw-r--r-- | src/ChangeLog | 11 | ||||
-rw-r--r-- | src/nsterm.m | 39 |
2 files changed, 48 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 42f96587ccc..d6429501059 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,14 @@ +2012-10-12 Jan Djärv <jan.h.d@swipnet.se> + + * nsterm.m (hold_event_q): New static variable. + (EV_TRAILER, sendScrollEventAtLoc:fromEvent:): Call hold_event if + ! q_event_ptr. + (hold_event): New function. + (ns_read_socket): If hold_event_q have events, store them and + return (Bug#12384). + (setPosition:portion:whole:): Send SIGIO to ourselves if apploopnr + is zero (Bug#12384). + 2012-10-12 Juanma Barranquero <lekktu@gmail.com> * makefile.w32-in ($(BLD)/w32select.$(O)): Update dependencies. diff --git a/src/nsterm.m b/src/nsterm.m index 1d935fc76de..98dd0a8aab1 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -208,6 +208,13 @@ static NSMutableArray *ns_pending_files, *ns_pending_service_names, *ns_pending_service_args; static BOOL ns_do_open_file = NO; +static struct { + struct input_event *q; + int nr, cap; +} hold_event_q = { + NULL, 0, 0 +}; + /* Convert modifiers in a NeXTstep event to emacs style modifiers. */ #define NS_FUNCTION_KEY_MASK 0x800000 #define NSLeftControlKeyMask (0x000001 | NSControlKeyMask) @@ -273,7 +280,7 @@ static BOOL ns_do_open_file = NO; kbd_buffer_store_event_hold (emacs_event, q_event_ptr); \ } \ else \ - kbd_buffer_store_event (emacs_event); \ + hold_event (emacs_event); \ EVENT_INIT (*emacs_event); \ ns_send_appdefined (-1); \ } @@ -292,6 +299,19 @@ void x_set_frame_alpha (struct frame *f); ========================================================================== */ +static void +hold_event (struct input_event *event) +{ + if (hold_event_q.nr == hold_event_q.cap) + { + if (hold_event_q.cap == 0) hold_event_q.cap = 10; + else hold_event_q.cap *= 2; + hold_event_q.q = (struct input_event *) + xrealloc (hold_event_q.q, hold_event_q.cap * sizeof (*hold_event_q.q)); + } + + hold_event_q.q[hold_event_q.nr++] = *event; +} static Lisp_Object append2 (Lisp_Object list, Lisp_Object item) @@ -3348,6 +3368,15 @@ ns_read_socket (struct terminal *terminal, struct input_event *hold_quit) if ([NSApp modalWindow] != nil) return -1; + if (hold_event_q.nr > 0) + { + int i; + for (i = 0; i < hold_event_q.nr; ++i) + kbd_buffer_store_event_hold (&hold_event_q.q[i], hold_quit); + hold_event_q.nr = 0; + return i; + } + block_input (); n_emacs_events_pending = 0; EVENT_INIT (ev); @@ -6645,6 +6674,12 @@ not_in_argv (NSString *arg) [self setFloatValue: pos knobProportion: por]; #endif } + + /* Events may come here even if the event loop is not running. + If we don't enter the event loop, the scroll bar will not update. + So send SIGIO to ourselves. */ + if (apploopnr == 0) kill (0, SIGIO); + return self; } @@ -6685,7 +6720,7 @@ not_in_argv (NSString *arg) kbd_buffer_store_event_hold (emacs_event, q_event_ptr); } else - kbd_buffer_store_event (emacs_event); + hold_event (emacs_event); EVENT_INIT (*emacs_event); ns_send_appdefined (-1); } |