sig
  type xtAppContext
  type 'a widget
  type wobject
  type shell_widget_class =
      ShellWidgetClass
    | OverrideShellWidgetClass
    | WmShellWidgetClass
    | TransientShellWidgetClass
    | TopLevelShellWidgetClass
    | ApplicationShellWidgetClass
    | SessionShellWidgetClass
  external xtOpenApplication :
    application_class:string ->
    Xt.shell_widget_class -> string array -> Xt.xtAppContext * 'Xt.widget
    = "ml_XtOpenApplication"
  external xtAppMainLoop : app:Xt.xtAppContext -> unit = "ml_XtAppMainLoop"
  external xtDestroyApplicationContext : app:Xt.xtAppContext -> unit
    = "ml_XtDestroyApplicationContext"
  external xtRealizeWidget : widget:'Xt.widget -> unit
    = "ml_XtRealizeWidget"
  external xtManageChild : child:'Xt.widget -> unit = "ml_XtManageChild"
  external xtUnmanageChild : child:'Xt.widget -> unit
    = "ml_XtUnmanageChild"
  external xtDisplay : widget:'Xt.widget -> Xlib.display = "ml_XtDisplay"
  external xtDisplayOfObject : wobject:Xt.wobject Xt.widget -> Xlib.display
    = "ml_XtDisplayOfObject"
  external xtScreen : widget:'Xt.widget -> Xlib.xScreen = "ml_XtScreen"
  external xtWindow : widget:'Xt.widget -> Xlib.window = "ml_XtWindow"
  external xtParent : widget:'Xt.widget -> 'Xt.widget = "ml_XtParent"
  external xtMapWidget : widget:'Xt.widget -> unit = "ml_XtMapWidget"
  external xtUnmapWidget : widget:'Xt.widget -> unit = "ml_XtUnmapWidget"
  type widget_class =
      AsciiSinkObjectClass
    | AsciiSrcObjectClass
    | AsciiTextWidgetClass
    | BoxWidgetClass
    | CommandWidgetClass
    | FormWidgetClass
    | GripWidgetClass
    | LabelWidgetClass
    | MenuButtonWidgetClass
  external xtCreateManagedWidget :
    name:string -> Xt.widget_class -> parent:'Xt.widget -> 'Xt.widget
    = "ml_XtCreateManagedWidget"
  type callback_name =
      XtNcallback
    | XtNdestroyCallback
    | XtNpopupCallback
    | XtNpopdownCallback
    | XtNunrealizeCallback
    | XtCCallback
    | XtRCallback
    | XtHaddCallback
    | XtHaddCallbacks
    | XtHremoveCallback
    | XtHremoveCallbacks
    | XtHremoveAllCallbacks
  external init_xtAddCallback : (int -> unit -> unit) -> unit
    = "init_xtAddCallback"
  val cb_tbl : (int, unit -> unit) Hashtbl.t
  val real_callback : int -> unit -> unit
  val cb_count : int Pervasives.ref
  val xtAddCallback :
    widget:'Xt.widget ->
    name:Xt.callback_name ->
    cb:(data:'-> value:unit -> unit) -> data:'-> unit
end