sig
  val cast : 'Gobject.obj -> Gtk.widget Gtk.obj
  module P = GtkBaseProps.Widget.P
  module S = GtkBaseProps.Widget.S
  external destroy : [> `widget ] Gtk.obj -> unit = "ml_gtk_widget_destroy"
  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 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.cairo -> 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 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_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 -> GdkPixbuf.pixbuf
    = "ml_gtk_widget_render_icon_pixbuf"
  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_gtk_widget_get_window"
  external allocation : [> `widget ] Gtk.obj -> Gtk.rectangle
    = "ml_gtk_widget_get_allocation"
  external set_visual : [> `widget ] Gtk.obj -> Gdk.visual -> unit
    = "ml_gtk_widget_set_visual"
  module Tooltip :
    sig
      external get_markup : [> `widget ] Gtk.obj -> string
        = "ml_gtk_widget_get_tooltip_markup"
      external set_markup : [> `widget ] Gtk.obj -> string -> unit
        = "ml_gtk_widget_set_tooltip_markup"
      external get_text : [> `widget ] Gtk.obj -> string
        = "ml_gtk_widget_get_tooltip_text"
      external set_text : [> `widget ] Gtk.obj -> string -> unit
        = "ml_gtk_widget_set_tooltip_text"
      external get_window : [> `widget ] Gtk.obj -> Gtk.window Gtk.obj
        = "ml_gtk_widget_get_tooltip_window"
      external set_window :
        [> `widget ] Gtk.obj -> [> `window ] Gtk.obj -> unit
        = "ml_gtk_widget_set_tooltip_window"
      external get_has_tooltip : [> `widget ] Gtk.obj -> bool
        = "ml_gtk_widget_get_has_tooltip"
      external set_has_tooltip : [> `widget ] Gtk.obj -> bool -> unit
        = "ml_gtk_widget_set_has_tooltip"
      external trigger_query : [> `widget ] Gtk.obj -> unit
        = "ml_gtk_widget_trigger_tooltip_query"
    end
  module Signals :
    sig
      val destroy : ([> `widget ], unit -> unit) GtkSignal.t
      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 visibility_notify :
            ([> `widget ], GdkEvent.Visibility.t -> bool) GtkSignal.t
          val window_state :
            ([> `widget ], GdkEvent.WindowState.t -> bool) GtkSignal.t
        end
    end
end