|
|
1.1 ! root 1: #include "copyright.h" ! 2: ! 3: /* $Header: XWinEvent.c,v 11.12 87/09/11 08:08:27 toddb Exp $ */ ! 4: /* Copyright Massachusetts Institute of Technology 1985 */ ! 5: ! 6: #define NEED_EVENTS ! 7: #include "Xlibint.h" ! 8: ! 9: extern _XQEvent *_qfree; ! 10: extern long _event_to_mask[]; ! 11: ! 12: /* ! 13: * Flush output and (wait for and) return the next event in the queue ! 14: * for the given window matching one of the events in the mask. ! 15: * Events earlier in the queue are not discarded. ! 16: */ ! 17: ! 18: XWindowEvent (dpy, w, mask, event) ! 19: register Display *dpy; ! 20: Window w; /* Selected window. */ ! 21: long mask; /* Selected event mask. */ ! 22: register XEvent *event; /* XEvent to be filled in. */ ! 23: { ! 24: register _XQEvent *prev, *qelt; ! 25: ! 26: LockDisplay(dpy); ! 27: _XFlush (dpy); ! 28: for (prev = NULL, qelt = dpy->head; ! 29: qelt && (qelt->event.type != KeymapNotify) ! 30: && (qelt->event.xany.window != w || ! 31: !(_event_to_mask [qelt->event.type] & mask)); ! 32: qelt = (prev = qelt)->next) ; ! 33: if (qelt) { ! 34: *event = qelt->event; ! 35: if (prev) { ! 36: if ((prev->next = qelt->next) == NULL) ! 37: dpy->tail = prev; ! 38: } else { ! 39: if ((dpy->head = qelt->next) == NULL) ! 40: dpy->tail = NULL; ! 41: } ! 42: qelt->next = _qfree; ! 43: _qfree = qelt; ! 44: dpy->qlen--; ! 45: UnlockDisplay(dpy); ! 46: return; ! 47: } ! 48: while (1) { ! 49: xEvent pe; /* wire protocol event */ ! 50: _XRead (dpy, (char *)&pe, (long) sizeof(xEvent)); ! 51: /* go call through display to find proper event reformatter */ ! 52: (*dpy->event_vec[pe.u.u.type & 0177])(dpy, event, &pe); ! 53: if (event->type == X_Error) ! 54: _XError(dpy, (xError *) &pe); ! 55: else if ((event->xany.window == w) ! 56: && (_event_to_mask[event->type] & mask)) { ! 57: UnlockDisplay(dpy); ! 58: return; ! 59: } else ! 60: _XEnq(dpy, &pe); ! 61: } ! 62: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.