X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_in.c;h=eab8b1d7a1e710991f3db77f9de3464a98a02ba7;hb=ac17ae62fe1a3a29991e36e35eeee838ac4acb00;hp=d1118fd0620c4d9a438a5bdaf9876e2a720a9803;hpb=685d8c76c25fd9f236fa1a74bae61699eaa78579;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_in.c b/src/xcb_in.c index d1118fd..eab8b1d 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -108,8 +108,8 @@ static int read_packet(XCBConnection *c) } 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)) @@ -363,11 +363,6 @@ int XCBPollForReply(XCBConnection *c, unsigned int request, void **reply, XCBGen return ret; } -XCBGenericEvent *XCBWaitEvent(XCBConnection *c) -{ - return XCBWaitForEvent(c); -} - XCBGenericEvent *XCBWaitForEvent(XCBConnection *c) { XCBGenericEvent *ret; @@ -385,21 +380,27 @@ XCBGenericEvent *XCBWaitForEvent(XCBConnection *c) 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) @@ -409,28 +410,17 @@ XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie) * XCBGetInputFocusReply, and XCBWaitForReply. */ XCBGenericError *ret; void *reply; - if(XCB_SEQUENCE_COMPARE(cookie.request,>,c->in.request_expected) - && XCB_SEQUENCE_COMPARE(cookie.request,>,c->in.request_completed)) + if(XCB_SEQUENCE_COMPARE(cookie.sequence,>,c->in.request_expected) + && XCB_SEQUENCE_COMPARE(cookie.sequence,>,c->in.request_completed)) { free(XCBGetInputFocusReply(c, XCBGetInputFocus(c), &ret)); assert(!ret); } - reply = XCBWaitForReply(c, cookie.request, &ret); + reply = XCBWaitForReply(c, cookie.sequence, &ret); assert(!reply); 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)