start in programs/Xserver/hw/xfree86/common/xf86Xinput.c
xEvent is static (on stack), owned by the caller:
we call -> public.processInputProc
or, new call: after pumping all the queue, push the time:
Very similar to the pumping of SyncEvents.
So, 2 calls: processEvent, stepInTime.
processEvent:
called only if keyboard not frozen. So, plugins must accept an event anytime?
if (plugin->frozen) push_in_queue (plugin->input_queue)
How do we step through the chain?
if (plugin->next)
{ if (do we have something to output) // This should consider the input queue of the ->next plugin! plugin->next->proc(keybd, plugin->next, event);
our_current_time = first_in_internal_queue or the time we were told.
if (plugin->next->wake_time && (our_current_time > plugin->next->wake_time)) plugin->next->step_in_time(keybd, plugin->next, event); }
}
when we are given time: again, we maybe deliver an event, and then some more time. maybe. we adjust the current_time.