}
c->in.request_completed = c->in.request_read - 1;
}
- if(genrep.response_type != XCBReply) /* error or event */
- c->in.request_completed = c->in.request_read; /* XXX: does event/error imply no more replies? */
+ if(genrep.response_type == XCBError)
+ c->in.request_completed = c->in.request_read;
while(c->in.pending_replies &&
XCB_SEQUENCE_COMPARE (c->in.pending_replies->request, <=, c->in.request_completed))
return ret;
}
-XCBGenericEvent *XCBWaitEvent(XCBConnection *c)
-{
- return XCBWaitForEvent(c);
-}
-
XCBGenericEvent *XCBWaitForEvent(XCBConnection *c)
{
XCBGenericEvent *ret;
XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error)
{
XCBGenericEvent *ret = 0;
+ int success;
pthread_mutex_lock(&c->iolock);
- if(error)
- *error = 0;
/* FIXME: follow X meets Z architecture changes. */
- if(_xcb_in_read(c))
+ success = _xcb_in_read(c);
+ if(success)
ret = get_event(c);
- else if(error)
+ pthread_mutex_unlock(&c->iolock);
+ if(success)
+ {
+ if(error)
+ *error = 0;
+ return ret;
+ }
+ if(error)
*error = -1;
else
{
fprintf(stderr, "XCBPollForEvent: I/O error occured, but no handler provided.\n");
abort();
}
- pthread_mutex_unlock(&c->iolock);
- return ret;
+ return 0;
}
XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie)
return ret;
}
-unsigned int XCBGetRequestRead(XCBConnection *c)
-{
- unsigned int ret;
- pthread_mutex_lock(&c->iolock);
- /* FIXME: follow X meets Z architecture changes. */
- _xcb_in_read(c);
- ret = c->in.request_read;
- pthread_mutex_unlock(&c->iolock);
- return ret;
-}
-
/* Private interface */
int _xcb_in_init(_xcb_in *in)