The type member is set to the event type constant name that uniquely identifies
it. For example, when the X server reports a GraphicsExpose event to a
client application, it sends an XGraphicsExposeEvent structure with the
type member set to GraphicsExpose. The display member is set to a pointer
to the display the event was read on. The send_event member is set to True
if the event came from a SendEvent protocol request. The serial member
is set from the serial number reported in the protocol but expanded from
the 16-bit least-significant bits to a full 32-bit value. The window member
is set to the window that is most useful to toolkit dispatchers.

The XEvent
structure is a union of the individual structures declared for each event
type:

An XEvent structure's first entry always is the type member, which is
set to the event type. The second member always is the serial number of
the protocol request that generated the event. The third member always is
send_event, which is a Bool that indicates if the event was sent by a
different client. The fourth member always is a display, which is the display
that the event was read from. Except for keymap events, the fifth member
always is a window, which has been carefully selected to be useful to toolkit
dispatchers. To avoid breaking toolkits, the order of these first five entries
is not to change. Most events also contain a time member, which is the time
at which an event occurred. In addition, a pointer to the generic event
must be cast before it is used to access any other information in the structure.