diff options
Diffstat (limited to 'nx-X11/lib/XTrap/XEDsptch.c')
-rw-r--r-- | nx-X11/lib/XTrap/XEDsptch.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/nx-X11/lib/XTrap/XEDsptch.c b/nx-X11/lib/XTrap/XEDsptch.c new file mode 100644 index 000000000..b50392638 --- /dev/null +++ b/nx-X11/lib/XTrap/XEDsptch.c @@ -0,0 +1,111 @@ +/* $XFree86$ */ +/***************************************************************************** +Copyright 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corp., Maynard, MA + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*****************************************************************************/ +/* + * + * CONTRIBUTORS: + * + * Dick Annicchiarico + * Robert Chesler + * Dan Coutu + * Gene Durso + * Marc Evans + * Alan Jamison + * Mark Henry + * Ken Miller + * + */ + +#include <stdio.h> +#include <errno.h> +#include <X11/extensions/xtraplib.h> +#include <X11/extensions/xtraplibp.h> + +static void XETrapDispatchCB(XETC *tc, XETrapDatum *pdatum) +{ + void_function pfunc = NULL; + BYTE *userp = NULL; + + /* Need to deal with Delta Timestamps here before calling client CB */ + if (XETrapGetTCFlagDeltaTimes(tc)) + { + CARD32 last_time = XETrapGetTCTime(tc); + if (XETrapHeaderIsEvent(&pdatum->hdr)) + { /* then we can play with the timestamps */ + pdatum->hdr.timestamp = + pdatum->u.event.u.keyButtonPointer.time; + } + else + { /* + * the current one from GetTimeInMillis is worthless + * as it's only updated during event instances (e.g. not + * wall clock). + */ + pdatum->hdr.timestamp = last_time; + } + if (!pdatum->hdr.timestamp) + { /* for dual monitor bug */ + pdatum->hdr.timestamp = last_time; + } + if (!last_time) + { /* first one! Prime it! */ + last_time = pdatum->hdr.timestamp; + } + tc->values.last_time = pdatum->hdr.timestamp; /* no macro! */ + if (pdatum->hdr.timestamp < last_time) + { /* for clock rollover */ + pdatum->hdr.timestamp = 0; + } + else + { /* the real delta */ + pdatum->hdr.timestamp = pdatum->hdr.timestamp - last_time; + } + } + /* Get the user supplied callback function */ + if (XETrapHeaderIsEvent(&pdatum->hdr)) + { + pfunc = tc->values.evt_cb[pdatum->u.event.u.u.type].func; + userp = tc->values.evt_cb[pdatum->u.event.u.u.type].data; + } + else if (XETrapHeaderIsRequest(&pdatum->hdr) || + XETrapHeaderIsReply(&pdatum->hdr)) + { + pfunc = tc->values.req_cb[pdatum->u.req.reqType].func; + userp = tc->values.req_cb[pdatum->u.req.reqType].data; + } + + /* If there is a callback then call it with the data */ + if (pfunc != NULL) + { + (*pfunc)(tc,pdatum,userp); + } +} + +Boolean XETrapDispatchXLib(XETrapDataEvent *event, XETC *tc) +{ + memcpy(&tc->xbuff[event->idx*sz_EventData], event->data, sz_EventData); + + if (event->detail == XETrapDataLast) + { + XETrapDispatchCB(tc, (XETrapDatum *)tc->xbuff); + } + return True; +} |