コード例 #1
0
ファイル: NextEvent.c プロジェクト: KuroyTatakai/libX11
int
XNextEvent (
	register Display *dpy,
	register XEvent *event)
{
	register _XQEvent *qelt;

	LockDisplay(dpy);

	/* Delete unclaimed cookies */
	_XFreeEventCookies(dpy);

	if (dpy->head == NULL)
	    _XReadEvents(dpy);
	qelt = dpy->head;
	*event = qelt->event;
	_XDeq(dpy, NULL, qelt);
	_XStoreEventCookie(dpy, event);
	UnlockDisplay(dpy);
	return 0;
}
コード例 #2
0
ファイル: PeekIfEv.c プロジェクト: MttDs/new-rexeno-tindpe
int
XPeekIfEvent (
	register Display *dpy,
	register XEvent *event,
	Bool (*predicate)(
			  Display*			/* display */,
			  XEvent*			/* event */,
			  char*				/* arg */
			  ),
	char *arg)
{
	register _XQEvent *prev, *qelt;
	unsigned long qe_serial = 0;

	LockDisplay(dpy);
	prev = NULL;
	while (1) {
	    for (qelt = prev ? prev->next : dpy->head;
		 qelt;
		 prev = qelt, qelt = qelt->next) {
		if(qelt->qserial_num > qe_serial
		   && (*predicate)(dpy, &qelt->event, arg)) {
		    XEvent copy;
		    *event = qelt->event;
		    if (_XCopyEventCookie(dpy, &event->xcookie, &copy.xcookie)) {
			_XStoreEventCookie(dpy, &copy);
			*event = copy;
		    }
		    UnlockDisplay(dpy);
		    return 0;
		}
	    }
	    if (prev)
		qe_serial = prev->qserial_num;
	    _XReadEvents(dpy);
	    if (prev && prev->qserial_num != qe_serial)
		/* another thread has snatched this event */
		prev = NULL;
	}
}
コード例 #3
0
ファイル: WinEvent.c プロジェクト: AKatti/androix-lib-libX11
int
XWindowEvent (
        register Display *dpy,
	Window w,		/* Selected window. */
	long mask,		/* Selected event mask. */
	register XEvent *event)	/* XEvent to be filled in. */
{
	register _XQEvent *prev, *qelt;
	unsigned long qe_serial = 0;

        LockDisplay(dpy);

	/* Delete unclaimed cookies */
	_XFreeEventCookies(dpy);

	prev = NULL;
	while (1) {
	    for (qelt = prev ? prev->next : dpy->head;
		 qelt;
		 prev = qelt, qelt = qelt->next) {
		if ((qelt->event.xany.window == w) &&
		    (qelt->event.type < GenericEvent) &&
		    (_Xevent_to_mask[qelt->event.type] & mask) &&
		    ((qelt->event.type != MotionNotify) ||
		     (mask & AllPointers) ||
		     (mask & AllButtons & qelt->event.xmotion.state))) {
		    *event = qelt->event;
		    _XDeq(dpy, prev, qelt);
		    UnlockDisplay(dpy);
		    return 0;
		}
	    }
	    if (prev)
		qe_serial = prev->qserial_num;
	    _XReadEvents(dpy);
	    if (prev && prev->qserial_num != qe_serial)
		/* another thread has snatched this event */
		prev = NULL;
	}
}