+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.
*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)
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); \
}
========================================================================== */
+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)
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);
[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;
}
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);
}