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