sig
  type event_type =
    [ `BUTTON_PRESS
    | `BUTTON_RELEASE
    | `CLIENT_EVENT
    | `CONFIGURE
    | `DELETE
    | `DESTROY
    | `DRAG_ENTER
    | `DRAG_LEAVE
    | `DRAG_MOTION
    | `DRAG_STATUS
    | `DROP_FINISHED
    | `DROP_START
    | `ENTER_NOTIFY
    | `EXPOSE
    | `FOCUS_CHANGE
    | `KEY_PRESS
    | `KEY_RELEASE
    | `LEAVE_NOTIFY
    | `MAP
    | `MOTION_NOTIFY
    | `NOTHING
    | `NO_EXPOSE
    | `PROPERTY_NOTIFY
    | `PROXIMITY_IN
    | `PROXIMITY_OUT
    | `SCROLL
    | `SELECTION_CLEAR
    | `SELECTION_NOTIFY
    | `SELECTION_REQUEST
    | `SETTING
    | `THREE_BUTTON_PRESS
    | `TWO_BUTTON_PRESS
    | `UNMAP
    | `VISIBILITY_NOTIFY
    | `WINDOW_STATE ]
  type event_mask =
    [ `ALL_EVENTS
    | `BUTTON1_MOTION
    | `BUTTON2_MOTION
    | `BUTTON3_MOTION
    | `BUTTON_MOTION
    | `BUTTON_PRESS
    | `BUTTON_RELEASE
    | `ENTER_NOTIFY
    | `EXPOSURE
    | `FOCUS_CHANGE
    | `KEY_PRESS
    | `KEY_RELEASE
    | `LEAVE_NOTIFY
    | `POINTER_MOTION
    | `POINTER_MOTION_HINT
    | `PROPERTY_CHANGE
    | `PROXIMITY_IN
    | `PROXIMITY_OUT
    | `SCROLL
    | `STRUCTURE
    | `SUBSTRUCTURE
    | `VISIBILITY_NOTIFY ]
  type extension_mode = [ `ALL | `CURSOR | `NONE ]
  type visibility_state = [ `FULLY_OBSCURED | `PARTIAL | `UNOBSCURED ]
  type input_source = [ `CURSOR | `ERASER | `MOUSE | `PEN ]
  type scroll_direction = [ `DOWN | `LEFT | `RIGHT | `UP ]
  type notify_type =
    [ `ANCESTOR
    | `INFERIOR
    | `NONLINEAR
    | `NONLINEAR_VIRTUAL
    | `UNKNOWN
    | `VIRTUAL ]
  type crossing_mode = [ `GRAB | `NORMAL | `UNGRAB ]
  type setting_action = [ `CHANGED | `DELETED | `NEW ]
  type window_state = [ `ICONIFIED | `MAXIMIZED | `STICKY | `WITHDRAWN ]
  type modifier =
    [ `BUTTON1
    | `BUTTON2
    | `BUTTON3
    | `BUTTON4
    | `BUTTON5
    | `CONTROL
    | `LOCK
    | `MOD1
    | `MOD2
    | `MOD3
    | `MOD4
    | `MOD5
    | `SHIFT ]
  type drag_action = [ `ASK | `COPY | `DEFAULT | `LINK | `MOVE | `PRIVATE ]
  type rgb_dither = [ `MAX | `NONE | `NORMAL ]
  type property_state = [ `DELETE | `NEW_VALUE ]
  type property_mode = [ `APPEND | `PREPEND | `REPLACE ]
  type xdata =
    [ `BYTES of string | `INT32S of int32 array | `SHORTS of int array ]
  type xdata_ret =
    [ `BYTES of string
    | `INT32S of int32 array
    | `NONE
    | `SHORTS of int array ]
  type gravity =
    [ `CENTER
    | `EAST
    | `NORTH
    | `NORTH_EAST
    | `NORTH_WEST
    | `SOUTH
    | `SOUTH_EAST
    | `SOUTH_WEST
    | `STATIC
    | `WEST ]
  type window_type_hint =
    [ `DESKTOP
    | `DIALOG
    | `DOCK
    | `MENU
    | `NORMAL
    | `SPLASHSCREEN
    | `TOOLBAR
    | `UTILITY ]
end