sig
  val cast : 'Gobject.obj -> Gtk.widget Gtk.obj
  module P :
    sig
      val app_paintable : ([> `widget ], bool) Gobject.property
      val can_default : ([> `widget ], bool) Gobject.property
      val can_focus : ([> `widget ], bool) Gobject.property
      val composite_child : ([> `widget ], bool) Gobject.property
      val events : ([> `widget ], GdkEnums.event_mask list) Gobject.property
      val extension_events :
        ([> `widget ], GdkEnums.extension_mode) Gobject.property
      val has_default : ([> `widget ], bool) Gobject.property
      val has_focus : ([> `widget ], bool) Gobject.property
      val height_request : ([> `widget ], int) Gobject.property
      val is_focus : ([> `widget ], bool) Gobject.property
      val name : ([> `widget ], string) Gobject.property
      val parent :
        ([> `widget ], Gtk.container Gtk.obj option) Gobject.property
      val receives_default : ([> `widget ], bool) Gobject.property
      val sensitive : ([> `widget ], bool) Gobject.property
      val style : ([> `widget ], Gtk.style) Gobject.property
      val visible : ([> `widget ], bool) Gobject.property
      val width_request : ([> `widget ], int) Gobject.property
    end
  module S :
    sig
      val show : ([> `widget ], unit -> unit) GtkSignal.t
      val hide : ([> `widget ], unit -> unit) GtkSignal.t
      val map : ([> `widget ], unit -> unit) GtkSignal.t
      val unmap : ([> `widget ], unit -> unit) GtkSignal.t
      val realize : ([> `widget ], unit -> unit) GtkSignal.t
      val unrealize : ([> `widget ], unit -> unit) GtkSignal.t
      val state_changed :
        ([> `widget ], GtkEnums.state_type -> unit) GtkSignal.t
      val parent_set :
        ([> `widget ], Gtk.widget Gtk.obj option -> unit) GtkSignal.t
      val size_allocate : ([> `widget ], Gtk.rectangle -> unit) GtkSignal.t
      val style_set : ([> `widget ], Gtk.style option -> unit) GtkSignal.t
      val selection_get :
        ([> `widget ], Gtk.selection_data -> info:int -> time:int32 -> unit)
        GtkSignal.t
      val selection_received :
        ([> `widget ], Gtk.selection_data -> time:int32 -> unit) GtkSignal.t
      val drag_begin : ([> `widget ], Gdk.drag_context -> unit) GtkSignal.t
      val drag_data_delete :
        ([> `widget ], Gdk.drag_context -> unit) GtkSignal.t
      val drag_data_get :
        ([> `widget ],
         Gdk.drag_context ->
         Gtk.selection_data -> info:int -> time:int32 -> unit)
        GtkSignal.t
      val drag_data_received :
        ([> `widget ],
         Gdk.drag_context ->
         x:int ->
         y:int -> Gtk.selection_data -> info:int -> time:int32 -> unit)
        GtkSignal.t
      val drag_drop :
        ([> `widget ],
         Gdk.drag_context -> x:int -> y:int -> time:int32 -> bool)
        GtkSignal.t
      val drag_end : ([> `widget ], Gdk.drag_context -> unit) GtkSignal.t
      val drag_leave :
        ([> `widget ], Gdk.drag_context -> time:int32 -> unit) GtkSignal.t
      val drag_motion :
        ([> `widget ],
         Gdk.drag_context -> x:int -> y:int -> time:int32 -> bool)
        GtkSignal.t
      val event : ([> `widget ], GdkEvent.any -> bool) GtkSignal.t
      val event_after : ([> `widget ], GdkEvent.any -> unit) GtkSignal.t
    end
  external set_double_buffered : [> `widget ] Gtk.obj -> bool -> unit
    = "ml_gtk_widget_set_double_buffered"
  external style_get_property :
    [> `widget ] Gtk.obj -> string -> Gobject.g_value
    = "ml_gtk_widget_style_get_property"
  val size_params :
    cont:(([> `widget ] as 'a) Gobject.param list -> 'b) ->
    'Gobject.param list -> ?width:int -> ?height:int -> 'b
  external unparent : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_unparent"
  external show : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_show"
  external show_now : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_show_now"
  external show_all : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_show_all"
  external hide : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_hide"
  external hide_all : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_hide_all"
  external map : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_map"
  external unmap : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_unmap"
  external realize : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_realize"
  external unrealize : [> `widget ] Gtk.obj -> unit
    = "ml_gtk_widget_unrealize"
  external queue_draw : [> `widget ] Gtk.obj -> unit
    = "ml_gtk_widget_queue_draw"
  external queue_resize : [> `widget ] Gtk.obj -> unit
    = "ml_gtk_widget_queue_resize"
  external draw : [> `widget ] Gtk.obj -> Gdk.Rectangle.t option -> unit
    = "ml_gtk_widget_draw"
  external event : [> `widget ] Gtk.obj -> 'Gdk.event -> bool
    = "ml_gtk_widget_event"
  external activate : [> `widget ] Gtk.obj -> bool = "ml_gtk_widget_activate"
  external reparent : [> `widget ] Gtk.obj -> [> `widget ] Gtk.obj -> unit
    = "ml_gtk_widget_reparent"
  external intersect :
    [> `widget ] Gtk.obj -> Gdk.Rectangle.t -> Gdk.Rectangle.t option
    = "ml_gtk_widget_intersect"
  external set_state : [> `widget ] Gtk.obj -> Gtk.Tags.state_type -> unit
    = "ml_gtk_widget_set_state"
  external set_uposition : [> `widget ] Gtk.obj -> x:int -> y:int -> unit
    = "ml_gtk_widget_set_uposition"
  external add_events :
    [> `widget ] Gtk.obj -> Gdk.Tags.event_mask list -> unit
    = "ml_gtk_widget_add_events"
  external get_toplevel : [> `widget ] Gtk.obj -> Gtk.widget Gtk.obj
    = "ml_gtk_widget_get_toplevel"
  external get_ancestor :
    [> `widget ] Gtk.obj -> Gobject.g_type -> Gtk.widget Gtk.obj
    = "ml_gtk_widget_get_ancestor"
  external get_colormap : [> `widget ] Gtk.obj -> Gdk.colormap
    = "ml_gtk_widget_get_colormap"
  external get_visual : [> `widget ] Gtk.obj -> Gdk.visual
    = "ml_gtk_widget_get_visual"
  external get_pointer : [> `widget ] Gtk.obj -> int * int
    = "ml_gtk_widget_get_pointer"
  external is_ancestor : [> `widget ] Gtk.obj -> [> `widget ] Gtk.obj -> bool
    = "ml_gtk_widget_is_ancestor"
  external ensure_style : [> `widget ] Gtk.obj -> unit
    = "ml_gtk_widget_ensure_style"
  external modify_fg :
    [> `widget ] Gtk.obj -> Gtk.Tags.state_type -> Gdk.color -> unit
    = "ml_gtk_widget_modify_fg"
  external modify_bg :
    [> `widget ] Gtk.obj -> Gtk.Tags.state_type -> Gdk.color -> unit
    = "ml_gtk_widget_modify_bg"
  external modify_text :
    [> `widget ] Gtk.obj -> Gtk.Tags.state_type -> Gdk.color -> unit
    = "ml_gtk_widget_modify_text"
  external modify_base :
    [> `widget ] Gtk.obj -> Gtk.Tags.state_type -> Gdk.color -> unit
    = "ml_gtk_widget_modify_base"
  external modify_font :
    [> `widget ] Gtk.obj -> Pango.font_description -> unit
    = "ml_gtk_widget_modify_font"
  external get_pango_context : [> `widget ] Gtk.obj -> Pango.context
    = "ml_gtk_widget_get_pango_context"
  external create_pango_context : [> `widget ] Gtk.obj -> Pango.context
    = "ml_gtk_widget_create_pango_context"
  external render_icon :
    [> `widget ] Gtk.obj ->
    string -> Gtk.Tags.icon_size -> string option -> GdkPixbuf.pixbuf
    = "ml_gtk_widget_render_icon"
  external add_accelerator :
    ([> `widget ] as 'a) Gtk.obj ->
    sgn:('a, unit -> unit) GtkSignal.t ->
    Gtk.accel_group ->
    key:Gdk.keysym ->
    ?modi:Gdk.Tags.modifier list -> ?flags:Gtk.Tags.accel_flag list -> unit
    = "ml_gtk_widget_add_accelerator_bc" "ml_gtk_widget_add_accelerator"
  external remove_accelerator :
    [> `widget ] Gtk.obj ->
    Gtk.accel_group -> key:Gdk.keysym -> ?modi:Gdk.Tags.modifier list -> unit
    = "ml_gtk_widget_remove_accelerator"
  external set_accel_path :
    [> `widget ] Gtk.obj -> string -> Gtk.accel_group -> unit
    = "ml_gtk_widget_set_accel_path"
  external window : [> `widget ] Gtk.obj -> Gdk.window
    = "ml_GtkWidget_window"
  external allocation : [> `widget ] Gtk.obj -> Gtk.rectangle
    = "ml_gtk_widget_allocation"
  external set_colormap : [> `widget ] Gtk.obj -> Gdk.colormap -> unit
    = "ml_gtk_widget_set_colormap"
  external set_visual : [> `widget ] Gtk.obj -> Gdk.visual -> unit
    = "ml_gtk_widget_set_visual"
  external set_default_colormap : Gdk.colormap -> unit
    = "ml_gtk_widget_set_default_colormap"
  external set_default_visual : Gdk.visual -> unit
    = "ml_gtk_widget_set_default_visual"
  external get_default_colormap : unit -> Gdk.colormap
    = "ml_gtk_widget_get_default_colormap"
  external get_default_visual : unit -> Gdk.visual
    = "ml_gtk_widget_get_default_visual"
  external push_colormap : Gdk.colormap -> unit
    = "ml_gtk_widget_push_colormap"
  external push_visual : Gdk.visual -> unit = "ml_gtk_widget_push_visual"
  external pop_colormap : unit -> unit = "ml_gtk_widget_pop_colormap"
  external pop_visual : unit -> unit = "ml_gtk_widget_pop_visual"
  module Signals :
    sig
      val marshal :
        (Gtk.widget Gtk.obj -> 'a) ->
        '-> [> `OBJECT of 'Gobject.obj option ] list -> 'a
      val marshal_opt :
        (Gtk.widget Gtk.obj option -> 'a) ->
        '-> [> `OBJECT of 'Gobject.obj option ] list -> 'a
      module Event :
        sig
          val marshal :
            ([< Gdk.Tags.event_type ] Gdk.event -> bool) ->
            Gobject.Closure.argv -> unit
          val any :
            ([> `widget ], Gdk.Tags.event_type Gdk.event -> bool) GtkSignal.t
          val button_press :
            ([> `widget ], GdkEvent.Button.t -> bool) GtkSignal.t
          val button_release :
            ([> `widget ], GdkEvent.Button.t -> bool) GtkSignal.t
          val motion_notify :
            ([> `widget ], GdkEvent.Motion.t -> bool) GtkSignal.t
          val delete :
            ([> `widget ], [ `DELETE ] Gdk.event -> bool) GtkSignal.t
          val destroy :
            ([> `widget ], [ `DESTROY ] Gdk.event -> bool) GtkSignal.t
          val expose : ([> `widget ], GdkEvent.Expose.t -> bool) GtkSignal.t
          val key_press : ([> `widget ], GdkEvent.Key.t -> bool) GtkSignal.t
          val key_release :
            ([> `widget ], GdkEvent.Key.t -> bool) GtkSignal.t
          val enter_notify :
            ([> `widget ], GdkEvent.Crossing.t -> bool) GtkSignal.t
          val leave_notify :
            ([> `widget ], GdkEvent.Crossing.t -> bool) GtkSignal.t
          val configure :
            ([> `widget ], GdkEvent.Configure.t -> bool) GtkSignal.t
          val focus_in : ([> `widget ], GdkEvent.Focus.t -> bool) GtkSignal.t
          val focus_out :
            ([> `widget ], GdkEvent.Focus.t -> bool) GtkSignal.t
          val map : ([> `widget ], [ `MAP ] Gdk.event -> bool) GtkSignal.t
          val unmap :
            ([> `widget ], [ `UNMAP ] Gdk.event -> bool) GtkSignal.t
          val property_notify :
            ([> `widget ], GdkEvent.Property.t -> bool) GtkSignal.t
          val scroll : ([> `widget ], GdkEvent.Scroll.t -> bool) GtkSignal.t
          val selection_clear :
            ([> `widget ], GdkEvent.Selection.t -> bool) GtkSignal.t
          val selection_request :
            ([> `widget ], GdkEvent.Selection.t -> bool) GtkSignal.t
          val selection_notify :
            ([> `widget ], GdkEvent.Selection.t -> bool) GtkSignal.t
          val proximity_in :
            ([> `widget ], GdkEvent.Proximity.t -> bool) GtkSignal.t
          val proximity_out :
            ([> `widget ], GdkEvent.Proximity.t -> bool) GtkSignal.t
          val client : ([> `widget ], GdkEvent.Client.t -> bool) GtkSignal.t
          val visibility_notify :
            ([> `widget ], GdkEvent.Visibility.t -> bool) GtkSignal.t
          val window_state :
            ([> `widget ], GdkEvent.WindowState.t -> bool) GtkSignal.t
        end
    end
end