Add XCBRequestCheck function needed for Plan 7.
This commit is contained in:
parent
b3a2f83f1e
commit
685d8c76c2
18
src/xcb.h
18
src/xcb.h
|
@ -272,6 +272,24 @@ XCBGenericEvent *XCBWaitForEvent(XCBConnection *c);
|
|||
*/
|
||||
XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error);
|
||||
|
||||
/**
|
||||
* @brief Return the error for a request, or NULL if none can ever arrive.
|
||||
* @param c: The connection to the X server.
|
||||
* @param cookie: The request cookie.
|
||||
* @return The error for the request, or NULL if none can ever arrive.
|
||||
*
|
||||
* The XCBVoidCookie cookie supplied to this function must have resulted from
|
||||
* a call to XCB[RequestName]Checked(). This function will block until one of
|
||||
* two conditions happens. If an error is received, it will be returned. If
|
||||
* a reply to a subsequent request has already arrived, no error can arrive
|
||||
* for this request, so this function will return NULL.
|
||||
*
|
||||
* Note that this function will perform a sync if needed to ensure that the
|
||||
* sequence number will advance beyond that provided in cookie; this is a
|
||||
* convenience to avoid races in determining whether the sync is needed.
|
||||
*/
|
||||
XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie);
|
||||
|
||||
/**
|
||||
* @brief Returns the last sequence number that the server is known to
|
||||
* have processed.
|
||||
|
|
18
src/xcb_in.c
18
src/xcb_in.c
|
@ -402,6 +402,24 @@ XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error)
|
|||
return ret;
|
||||
}
|
||||
|
||||
XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie)
|
||||
{
|
||||
/* FIXME: this could hold the lock to avoid syncing unnecessarily, but
|
||||
* that would require factoring the locking out of XCBGetInputFocus,
|
||||
* 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))
|
||||
{
|
||||
free(XCBGetInputFocusReply(c, XCBGetInputFocus(c), &ret));
|
||||
assert(!ret);
|
||||
}
|
||||
reply = XCBWaitForReply(c, cookie.request, &ret);
|
||||
assert(!reply);
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned int XCBGetRequestRead(XCBConnection *c)
|
||||
{
|
||||
unsigned int ret;
|
||||
|
|
Loading…
Reference in New Issue