sig
  class menu_shell_signals :
    [> Gtk.menu_shell ] Gtk.obj ->
    object ('a)
      method add : callback:(GObj.widget -> unit) -> GtkSignal.id
      method after : 'a
      method deactivate : callback:(unit -> unit) -> GtkSignal.id
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method notify_border_width : callback:(int -> unit) -> GtkSignal.id
      method notify_resize_mode :
        callback:(GtkEnums.resize_mode -> unit) -> GtkSignal.id
      method remove : callback:(GObj.widget -> unit) -> GtkSignal.id
    end
  class menu_item_signals :
    [> Gtk.menu_item ] Gtk.obj ->
    object ('a)
      method activate : callback:(unit -> unit) -> GtkSignal.id
      method add : callback:(GObj.widget -> unit) -> GtkSignal.id
      method after : 'a
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method notify_border_width : callback:(int -> unit) -> GtkSignal.id
      method notify_resize_mode :
        callback:(GtkEnums.resize_mode -> unit) -> GtkSignal.id
      method remove : callback:(GObj.widget -> unit) -> GtkSignal.id
    end
  class menu_item_skel :
    ([> Gtk.menu_item ] as 'a) Gtk.obj ->
    object
      val obj : 'Gtk.obj
      method activate : unit -> unit
      method add : GObj.widget -> unit
      method add_accelerator :
        group:Gtk.accel_group ->
        ?modi:Gdk.Tags.modifier list ->
        ?flags:Gtk.Tags.accel_flag list -> Gdk.keysym -> unit
      method all_children : GObj.widget list
      method as_item : Gtk.menu_item Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GObj.widget list
      method coerce : GObj.widget
      method deselect : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method focus : GContainer.focus
      method get_oid : int
      method get_submenu : GObj.widget option
      method misc : GObj.misc_ops
      method remove : GObj.widget -> unit
      method remove_submenu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method select : unit -> unit
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_submenu : GMenu.menu -> unit
    end
  and menu_item :
    ([> Gtk.menu_item ] as 'a) Gtk.obj ->
    object
      val obj : 'Gtk.obj
      method activate : unit -> unit
      method add : GObj.widget -> unit
      method add_accelerator :
        group:Gtk.accel_group ->
        ?modi:Gdk.Tags.modifier list ->
        ?flags:Gtk.Tags.accel_flag list -> Gdk.keysym -> unit
      method all_children : GObj.widget list
      method as_item : Gtk.menu_item Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GObj.widget list
      method coerce : GObj.widget
      method connect : GMenu.menu_item_signals
      method deselect : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method get_oid : int
      method get_submenu : GObj.widget option
      method misc : GObj.misc_ops
      method remove : GObj.widget -> unit
      method remove_submenu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method select : unit -> unit
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_submenu : GMenu.menu -> unit
    end
  and menu :
    Gtk.menu Gtk.obj ->
    object
      val obj : Gtk.menu Gtk.obj
      method add : GMenu.menu_item -> unit
      method all_children : GMenu.menu_item list
      method append : GMenu.menu_item -> unit
      method as_menu : Gtk.menu Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GMenu.menu_item list
      method coerce : GObj.widget
      method connect : GMenu.menu_shell_signals
      method deactivate : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method get_oid : int
      method insert : GMenu.menu_item -> pos:int -> unit
      method misc : GObj.misc_ops
      method popdown : unit -> unit
      method popup : button:int -> time:int32 -> unit
      method prepend : GMenu.menu_item -> unit
      method remove : GMenu.menu_item -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method set_accel_group : Gtk.accel_group -> unit
      method set_accel_path : string -> unit
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method private wrap : Gtk.widget Gtk.obj -> GMenu.menu_item
    end
  val menu :
    ?accel_path:string ->
    ?border_width:int ->
    ?packing:(GMenu.menu -> unit) -> ?show:bool -> unit -> GMenu.menu
  val menu_item :
    ?use_mnemonic:bool ->
    ?label:string ->
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.menu_item
  class check_menu_item_signals :
    [> Gtk.check_menu_item ] Gtk.obj ->
    object ('a)
      method activate : callback:(unit -> unit) -> GtkSignal.id
      method add : callback:(GObj.widget -> unit) -> GtkSignal.id
      method after : 'a
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method notify_border_width : callback:(int -> unit) -> GtkSignal.id
      method notify_resize_mode :
        callback:(GtkEnums.resize_mode -> unit) -> GtkSignal.id
      method remove : callback:(GObj.widget -> unit) -> GtkSignal.id
      method toggled : callback:(unit -> unit) -> GtkSignal.id
    end
  class check_menu_item :
    ([> Gtk.check_menu_item ] as 'a) Gtk.obj ->
    object
      val obj : 'Gtk.obj
      method activate : unit -> unit
      method active : bool
      method add : GObj.widget -> unit
      method add_accelerator :
        group:Gtk.accel_group ->
        ?modi:Gdk.Tags.modifier list ->
        ?flags:Gtk.Tags.accel_flag list -> Gdk.keysym -> unit
      method all_children : GObj.widget list
      method as_item : Gtk.menu_item Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GObj.widget list
      method coerce : GObj.widget
      method connect : GMenu.check_menu_item_signals
      method deselect : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method get_oid : int
      method get_submenu : GObj.widget option
      method inconsistent : bool
      method misc : GObj.misc_ops
      method remove : GObj.widget -> unit
      method remove_submenu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method select : unit -> unit
      method set_active : bool -> unit
      method set_border_width : int -> unit
      method set_inconsistent : bool -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_submenu : menu -> unit
      method toggled : unit -> unit
    end
  val check_menu_item :
    ?label:string ->
    ?use_mnemonic:bool ->
    ?active:bool ->
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.check_menu_item
  class radio_menu_item :
    Gtk.radio_menu_item Gtk.obj ->
    object
      val obj : Gtk.radio_menu_item Gtk.obj
      method activate : unit -> unit
      method active : bool
      method add : GObj.widget -> unit
      method add_accelerator :
        group:Gtk.accel_group ->
        ?modi:Gdk.Tags.modifier list ->
        ?flags:Gtk.Tags.accel_flag list -> Gdk.keysym -> unit
      method all_children : GObj.widget list
      method as_item : Gtk.menu_item Gtk.obj
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GObj.widget list
      method coerce : GObj.widget
      method connect : check_menu_item_signals
      method deselect : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method get_oid : int
      method get_submenu : GObj.widget option
      method group : Gtk.radio_menu_item Gtk.group
      method inconsistent : bool
      method misc : GObj.misc_ops
      method remove : GObj.widget -> unit
      method remove_submenu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method select : unit -> unit
      method set_active : bool -> unit
      method set_border_width : int -> unit
      method set_group : Gtk.radio_menu_item Gtk.group -> unit
      method set_inconsistent : bool -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_submenu : menu -> unit
      method toggled : unit -> unit
    end
  val radio_menu_item :
    ?group:Gtk.radio_menu_item Gtk.group ->
    ?label:string ->
    ?use_mnemonic:bool ->
    ?active:bool ->
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.radio_menu_item
  class menu_shell :
    ([> Gtk.menu_shell ] as 'a) Gtk.obj ->
    object
      val obj : 'Gtk.obj
      method add : GMenu.menu_item -> unit
      method all_children : GMenu.menu_item list
      method append : GMenu.menu_item -> unit
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method children : GMenu.menu_item list
      method coerce : GObj.widget
      method connect : GMenu.menu_shell_signals
      method deactivate : unit -> unit
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method get_oid : int
      method insert : GMenu.menu_item -> pos:int -> unit
      method misc : GObj.misc_ops
      method prepend : GMenu.menu_item -> unit
      method remove : GMenu.menu_item -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method private wrap : Gtk.widget Gtk.obj -> GMenu.menu_item
    end
  val menu_bar :
    ?border_width:int ->
    ?width:int ->
    ?height:int ->
    ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> GMenu.menu_shell
  class ['a] factory :
    ?accel_group:Gtk.accel_group ->
    ?accel_path:string ->
    ?accel_modi:Gdk.Tags.modifier list ->
    ?accel_flags:Gtk.Tags.accel_flag list ->
    '->
    object
      constraint 'a = #GMenu.menu_shell
      val flags : Gtk.Tags.accel_flag list
      val group : Gtk.accel_group
      val m : Gdk.Tags.modifier list
      val menu_shell : 'a
      method accel_group : Gtk.accel_group
      method add_check_item :
        ?active:bool ->
        ?key:Gdk.keysym ->
        ?callback:(bool -> unit) -> string -> GMenu.check_menu_item
      method add_item :
        ?key:Gdk.keysym ->
        ?callback:(unit -> unit) ->
        ?submenu:GMenu.menu -> string -> GMenu.menu_item
      method add_radio_item :
        ?group:Gtk.radio_menu_item Gtk.group ->
        ?active:bool ->
        ?key:Gdk.keysym ->
        ?callback:(bool -> unit) -> string -> GMenu.radio_menu_item
      method add_submenu : ?key:Gdk.keysym -> string -> GMenu.menu
      method private bind :
        ?modi:Gdk.Tags.modifier list ->
        ?key:Gdk.keysym ->
        ?callback:(unit -> unit) -> GMenu.menu_item -> string -> unit
      method menu : 'a
    end
end