1: #include <X/mit-copyright.h> 2: 3: /* $Header: XUpdateMouse.c,v 10.4 86/02/01 15:41:37 tony Rel $ */ 4: /* Copyright Massachusetts Institute of Technology 1985 */ 5: 6: #include "XlibInternal.h" 7: 8: extern _QEvent *_qfree; 9: 10: /* Like XQueryMouse, but also reads pending events and flushes any MouseMoved 11: * events at the head of the queue. A good way to track the mouse is to use 12: * a MouseMoved event as a "hint", by calling this routine to get up to date 13: * coordinates. 14: */ 15: 16: Status XUpdateMouse (w, x, y, subw) 17: Window w; 18: Window *subw; 19: int *x, *y; 20: { 21: register Display *dpy; 22: register XReq *req; 23: register _QEvent *qelt; 24: XRep rep; 25: 26: XPending(dpy = _XlibCurrentDisplay); 27: /* read all events in socket's kernel buffer */ 28: GetReq(X_QueryMouse, w); 29: if (!_XReply(dpy, &rep)) 30: return(0); 31: while ((qelt = dpy->head) && qelt->event.type == MouseMoved) { 32: if ((dpy->head = qelt->next) == NULL) 33: dpy->tail = NULL; 34: qelt->next = _qfree; 35: _qfree = qelt; 36: dpy->qlen--; 37: } 38: *x = rep.param.s[2]; 39: *y = rep.param.s[3]; 40: *subw = rep.param.l[0]; 41: return (1); 42: }