sig
  type event_type =
      [ `BUTTON_PRESS
      | `BUTTON_RELEASE
      | `CLIENT_EVENT
      | `CONFIGURE
      | `DAMAGE
      | `DELETE
      | `DESTROY
      | `DRAG_ENTER
      | `DRAG_LEAVE
      | `DRAG_MOTION
      | `DRAG_STATUS
      | `DROP_FINISHED
      | `DROP_START
      | `ENTER_NOTIFY
      | `EXPOSE
      | `FOCUS_CHANGE
      | `GRAB_BROKEN
      | `KEY_PRESS
      | `KEY_RELEASE
      | `LEAVE_NOTIFY
      | `MAP
      | `MOTION_NOTIFY
      | `NOTHING
      | `OWNER_CHANGE
      | `PROPERTY_NOTIFY
      | `PROXIMITY_IN
      | `PROXIMITY_OUT
      | `SCROLL
      | `SELECTION_CLEAR
      | `SELECTION_NOTIFY
      | `SELECTION_REQUEST
      | `SETTING
      | `THREE_BUTTON_PRESS
      | `TOUCHPAD_PINCH
      | `TOUCHPAD_SWIPE
      | `TOUCH_BEGIN
      | `TOUCH_CANCEL
      | `TOUCH_END
      | `TOUCH_UPDATE
      | `TWO_BUTTON_PRESS
      | `UNMAP
      | `VISIBILITY_NOTIFY
      | `WINDOW_STATE ]
  type visibility_state = [ `FULLY_OBSCURED | `PARTIAL | `UNOBSCURED ]
  type touchpad_gesture_phase = [ `BEGIN | `CANCEL | `END | `UPDATE ]
  type scroll_direction = [ `DOWN | `LEFT | `RIGHT | `SMOOTH | `UP ]
  type crossing_mode =
      [ `DEVICE_SWITCH
      | `GRAB
      | `GTK_GRAB
      | `GTK_UNGRAB
      | `NORMAL
      | `STATE_CHANGED
      | `TOUCH_BEGIN
      | `TOUCH_END
      | `UNGRAB ]
  type notify_type =
      [ `ANCESTOR
      | `INFERIOR
      | `NONLINEAR
      | `NONLINEAR_VIRTUAL
      | `UNKNOWN
      | `VIRTUAL ]
  type setting_action = [ `CHANGED | `DELETED | `NEW ]
  type owner_change = [ `CLOSE | `DESTROY | `NEW_OWNER ]
  type window_state =
      [ `ABOVE
      | `BELOW
      | `FOCUSED
      | `FULLSCREEN
      | `ICONIFIED
      | `MAXIMIZED
      | `STICKY
      | `TILED
      | `WITHDRAWN ]
  type input_source =
      [ `CURSOR
      | `ERASER
      | `KEYBOARD
      | `MOUSE
      | `PEN
      | `TOUCHPAD
      | `TOUCHSCREEN ]
  type input_mode = [ `DISABLED | `SCREEN | `WINDOW ]
  type device_type = [ `FLOATING | `MASTER | `SLAVE ]
  type visual_type =
      [ `DIRECT_COLOR
      | `GRAYSCALE
      | `PSEUDO_COLOR
      | `STATIC_COLOR
      | `STATIC_GRAY
      | `TRUE_COLOR ]
  type drag_action = [ `ASK | `COPY | `DEFAULT | `LINK | `MOVE | `PRIVATE ]
  type drag_protocol =
      [ `LOCAL
      | `MOTIF
      | `NONE
      | `OLE2
      | `ROOTWIN
      | `WAYLAND
      | `WIN32_DROPFILES
      | `XDND ]
  type property_state = [ `DELETE | `NEW_VALUE ]
  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 property_mode = [ `APPEND | `PREPEND | `REPLACE ]
  type window_class = [ `INPUT_ONLY | `INPUT_OUTPUT ]
  type window_type =
      [ `CHILD
      | `FOREIGN
      | `OFFSCREEN
      | `ROOT
      | `SUBSURFACE
      | `TEMP
      | `TOPLEVEL ]
  type window_attributes_type =
      [ `CURSOR
      | `NOREDIR
      | `TITLE
      | `TYPE_HINT
      | `VISUAL
      | `WMCLASS
      | `X
      | `Y ]
  type window_hints =
      [ `ASPECT
      | `BASE_SIZE
      | `MAX_SIZE
      | `MIN_SIZE
      | `POS
      | `RESIZE_INC
      | `USER_POS
      | `USER_SIZE
      | `WIN_GRAVITY ]
  type wm_decoration =
      [ `ALL | `BORDER | `MAXIMIZE | `MENU | `MINIMIZE | `RESIZEH | `TITLE ]
  type wm_function =
      [ `ALL | `CLOSE | `MAXIMIZE | `MINIMIZE | `MOVE | `RESIZE ]
  type gravity =
      [ `CENTER
      | `EAST
      | `NORTH
      | `NORTH_EAST
      | `NORTH_WEST
      | `SOUTH
      | `SOUTH_EAST
      | `SOUTH_WEST
      | `STATIC
      | `WEST ]
  type window_edge =
      [ `EAST
      | `NORTH
      | `NORTH_EAST
      | `NORTH_WEST
      | `SOUTH
      | `SOUTH_EAST
      | `SOUTH_WEST
      | `WEST ]
  type fullscreen_mode = [ `ON_ALL_MONITORS | `ON_CURRENT_MONITOR ]
  type modifier =
      [ `BUTTON1
      | `BUTTON2
      | `BUTTON3
      | `BUTTON4
      | `BUTTON5
      | `CONTROL
      | `HYPER
      | `LOCK
      | `META
      | `MOD1
      | `MOD2
      | `MOD3
      | `MOD4
      | `MOD5
      | `RELEASE
      | `SHIFT
      | `SUPER ]
  type modifier_intent =
      [ `CONTEXT_MENU
      | `DEFAULT_MOD_MASK
      | `EXTEND_SELECTION
      | `MODIFY_SELECTION
      | `NO_TEXT_INPUT
      | `PRIMARY_ACCELERATOR
      | `SHIFT_GROUP ]
  type status = [ `ERROR | `ERROR_FILE | `ERROR_MEM | `ERROR_PARAM | `OK ]
  type grab_status =
      [ `ALREADY_GRABBED
      | `FAILED
      | `FROZEN
      | `INVALID_TIME
      | `NOT_VIEWABLE
      | `SUCCESS ]
  type grab_ownership = [ `APPLICATION | `NONE | `WINDOW ]
  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
      | `SMOOTH_SCROLL
      | `STRUCTURE
      | `SUBSTRUCTURE
      | `TOUCH
      | `TOUCHPAD_GESTURE
      | `VISIBILITY_NOTIFY ]
  type gl_error =
      [ `NOT_AVAILABLE | `UNSUPPORTED_FORMAT | `UNSUPPORTED_PROFILE ]
  type window_type_hint =
      [ `COMBO
      | `DESKTOP
      | `DIALOG
      | `DND
      | `DOCK
      | `DROPDOWN_MENU
      | `MENU
      | `NORMAL
      | `NOTIFICATION
      | `POPUP_MENU
      | `SPLASHSCREEN
      | `TOOLBAR
      | `TOOLTIP
      | `UTILITY ]
  type axis_use =
      [ `IGNORE | `LAST | `PRESSURE | `WHEEL | `X | `XTILT | `Y | `YTILT ]
end