sig
  module Main :
    sig
      val init : ?setlocale:bool -> unit -> string
      val main : unit -> unit
      val quit : unit -> unit
      val version : int * int * int
    end
  val init : ?setlocale:bool -> unit -> string
  val main : unit -> unit
  val quit : unit -> unit
  val selection : GData.clipboard
  val clipboard : GData.clipboard
  module Grab :
    sig
      val add : #GObj.widget -> unit
      val remove : #GObj.widget -> unit
      val get_current : unit -> GObj.widget
    end
  module Event :
    sig
      val get_current_time : unit -> int32
      val get_current : unit -> GdkEvent.any
      val get_widget : 'Gdk.event -> Gtk.widget Gtk.obj
      val propagate : [> `widget ] Gtk.obj -> 'Gdk.event -> unit
    end
  module Rc : sig val add_default_file : string -> unit end
  module Timeout :
    sig
      type id = Glib.Timeout.id
      val add : ms:int -> callback:(unit -> bool) -> GMain.Timeout.id
      val remove : GMain.Timeout.id -> unit
    end
  module Idle :
    sig
      type id = Glib.Idle.id
      val add : ?prio:int -> (unit -> bool) -> GMain.Idle.id
      val remove : GMain.Idle.id -> unit
    end
  module Io :
    sig
      type channel = Glib.Io.channel
      type condition = [ `ERR | `HUP | `IN | `NVAL | `OUT | `PRI ]
      type id
      val channel_of_descr : Unix.file_descr -> GMain.Io.channel
      val add_watch :
        cond:GMain.Io.condition list ->
        callback:(GMain.Io.condition list -> bool) ->
        ?prio:int -> GMain.Io.channel -> GMain.Io.id
      val remove : GMain.Io.id -> unit
      val read : GMain.Io.channel -> buf:string -> pos:int -> len:int -> int
      val read_chars :
        GMain.Io.channel -> buf:string -> pos:int -> len:int -> int
    end
end