[Xcb] Re: [E-devel] XCB/XCL

Bart Massey bart@cs.pdx.edu
Tue, 29 Apr 2003 15:30:28 -0700

In message <20030427104627.098f7c2f.raster@rasterman.com> you wrote:
> On Sat, 26 Apr 2003 14:05:57 -0700 Bart Massey <bart@cs.pdx.edu> babbled:
> > OK, after dicussing with you and after long talks with Keith
> > Packard and Jamey today, I think what we need is a tiny
> > extension to XCB:
> > 
> >   XCBGenericResponse *XCBWaitResponse(XCBConnection *c)
> >   XCBGenericResponse *XCBPollResponse(XCBConnection *c)
> > 
> > where an XCBGenericResponse is either an XCBGenericRep
> > (consisting of reply data tagged by its sequence number), an
> > XCBGenericError, or an XCBGenericEvent.  XCBPollResponse
> > will return 0 if nothing is available, XCBWaitResponse will
> > block (duh).  Once a cookie's reply has been returned by
> > XCBPollResponse, the cookie becomes invalid for further use
> > (duh).
> i don't see how the XCBGenericResponse hooks up to any of
> the Cookies returned by xcb calls. there's nothing in
> common there. from an api standpoint i generally dont like
> digging into data structs - i like them opaque, but the
> mechanism of using cookie->seqnum sounded better and
> comparing to the connection seqnum. personally i would
> think providing accessor functions to provide for a nice
> api would be better there. ie "has the seqnum of this
> cookie been recieved yet" that would do just fine.

The answer to your first question is that if the
GenericResponse is a GenericRep, one of its fields is a
sequence number to match against cookies'.

We can do the latter thing.  As I suggested in a previous
message, we can provide
   int XCBForcingWouldBlock(XCBGenericCookie c)
which I think answers the question you posed.

Does this answer your question?

> also i have to ask why all the cookie data structs are
> different per request, but they end up all being the same
> internally with the same single int value?  what was the
> reason for this? this makes doing the above kind of work
> harder - either i have to assume this and cast them all to
> int's or special case every single cookie reply type - and
> theres no "parent" type i can rely on to be common. ?

The whole idea is to enforce static type checking, making it
difficult to pass e.g. a pixmap cookie to a routine that
wants a property cookie.  Casting the cookie to a
GenericCookie and taking its sequence number field is
harmless: the cookies are all guaranteed to have this.

XCB definitely encourages a different programming model
(actually several different models) than e uses.  I don't
think it's hard to make XCB do pretty much what e needs,