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 expand : ([> `widget ], bool) Gobject.property
      val focus_on_click : ([> `widget ], bool) Gobject.property
      val halign : ([> `widget ], GtkEnums.align) Gobject.property
      val has_default : ([> `widget ], bool) Gobject.property
      val has_focus : ([> `widget ], bool) Gobject.property
      val has_tooltip : ([> `widget ], bool) Gobject.property
      val height_request : ([> `widget ], int) Gobject.property
      val hexpand : ([> `widget ], bool) Gobject.property
      val hexpand_set : ([> `widget ], bool) Gobject.property
      val is_focus : ([> `widget ], bool) Gobject.property
      val margin : ([> `widget ], int) Gobject.property
      val margin_bottom : ([> `widget ], int) Gobject.property
      val margin_end : ([> `widget ], int) Gobject.property
      val margin_left : ([> `widget ], int) Gobject.property
      val margin_right : ([> `widget ], int) Gobject.property
      val margin_start : ([> `widget ], int) Gobject.property
      val margin_top : ([> `widget ], int) Gobject.property
      val name : ([> `widget ], string) Gobject.property
      val no_show_all : ([> `widget ], bool) Gobject.property
      val opacity : ([> `widget ], float) Gobject.property
      val parent :
        ([> `widget ], Gtk.container Gtk.obj option) Gobject.property
      val receives_default : ([> `widget ], bool) Gobject.property
      val scale_factor : ([> `widget ], int) Gobject.property
      val sensitive : ([> `widget ], bool) Gobject.property
      val style : ([> `widget ], Gtk.style) Gobject.property
      val tooltip_markup : ([> `widget ], string) Gobject.property
      val tooltip_text : ([> `widget ], string) Gobject.property
      val valign : ([> `widget ], GtkEnums.align) Gobject.property
      val vexpand : ([> `widget ], bool) Gobject.property
      val vexpand_set : ([> `widget ], bool) Gobject.property
      val visible : ([> `widget ], bool) Gobject.property
      val width_request : ([> `widget ], int) Gobject.property
    end
  module S :
    sig
      val destroy : ([> `widget ], unit -> unit) GtkSignal.t
      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 query_tooltip :
        ([> `widget ], x:int -> y:int -> kbd:bool -> Gtk.tooltip -> bool)
        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 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"
end