Some extension XGenericEvents require additional memory
to store information. For these events, the library returns a XGenericEventCookie
with a token ('cookie') unique to this event. The XGenericEventCookie's
data pointer is undefined until XGetEventData is called.

The XGetEventData
function retrieves this extra data for the given cookie. No round-trip
to the server is required. If the cookie is invalid or the event is not
an event handled by cookie handlers, False is returned. If XGetEventData
returns True, the cookie's data pointer points to the memory containing
the event information. A client must call XFreeEventData to free this
memory. XGetEventData returns False for multiple calls for the same
event cookie.

The XFreeEventData function frees the data associated with
a cookie. A client must call XFreeEventData for each cookie claimed with
XGetEventData.

A cookie is defined as unclaimed if it has been returned to the
client through XNextEvent but its data has not been retrieved via XGetEventData.
Subsequent calls to XNextEvent may free memory associated with unclaimed
cookies. Multi-threaded X clients must ensure that XGetEventData is called
before the next call to XNextEvent.