Next: Event Stream Callback Routines, Previous: Specifics About the Emacs Event, Up: Events and the Event Loop [Contents][Index]
There are two event queues here – the command event queue (#### which should be called "deferred event queue" and is in my glyph ws) and the dispatch event queue. Under X, it’s possible to selectively process events such that we take all the user events before the non-user ones.
The dispatch queue (which used to occur duplicated inside of each event
implementation) is used for events that have been read from the
window-system event queue(s) and not yet process by
next_event_internal()
. It exists for two reasons: (1) because in many
implementations, events often come from the window system by way of
callbacks, and need to push the event to be returned onto a queue; (2)
in order to handle QUIT in a guaranteed correct fashion without
resorting to weird implementation-specific hacks that may or may not
work well, we need to drain the window-system event queues and then look
through to see if there’s an event matching quit-char (usually ^G). the
drained events need to go onto a queue. (There are other, similar cases
where we need to drain the pending events so we can look ahead – for
example, checking for pending expose events under X to avoid excessive
server activity.)
The command event queue is used AFTER an event has been read from
next_event_internal()
, when it needs to be pushed back. This
includes, for example, accept-process-output
, sleep-for
and wait_delaying_user_input()
. Eval events and the like,
generated by enqueue-eval-event
,
enqueue_magic_eval_event()
, etc. are also pushed onto this queue.
Some events generated by callbacks are also pushed onto this queue, ####
although maybe shouldn’t be.
The command queue takes precedence over the dispatch queue.
#### It is worth investigating to see whether both queues are really
needed, and how exactly they should be used. enqueue-eval-event
,
for example, could certainly push onto the dispatch queue, and all
callbacks maybe should. wait_delaying_user_input()
seems to need
both queues, since it can take events from the dispatch queue and push
them onto the command queue; but it perhaps could be rewritten to avoid
this. #### In general we need to review the handling of these two
queues, figure out exactly what ought to be happening, and document it.
Next: Event Stream Callback Routines, Previous: Specifics About the Emacs Event, Up: Events and the Event Loop [Contents][Index]