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 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 deselect : callback:(unit -> unit) -> GtkSignal.id
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method remove : callback:(GObj.widget -> unit) -> GtkSignal.id
      method select : callback:(unit -> unit) -> GtkSignal.id
      method toggle : callback:(unit -> 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 right_justified : bool
      method select : unit -> unit
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_right_justified : bool -> 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 right_justified : bool
      method select : unit -> unit
      method set_border_width : int -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_right_justified : bool -> 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 ->
    ?right_justified:bool ->
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.menu_item
  val tearoff_item :
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.menu_item
  val separator_item :
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.menu_item
  class image_menu_item :
    Gtk.image_menu_item Gtk.obj ->
    object
      val obj : Gtk.image_menu_item 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 image : GObj.widget
      method misc : GObj.misc_ops
      method remove : GObj.widget -> unit
      method remove_submenu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method right_justified : bool
      method select : unit -> unit
      method set_border_width : int -> unit
      method set_image : GObj.widget -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_right_justified : bool -> unit
      method set_submenu : menu -> unit
    end
  val image_menu_item :
    ?image:#GObj.widget ->
    ?label:string ->
    ?use_mnemonic:bool ->
    ?stock:GtkStock.id ->
    ?right_justified:bool ->
    ?packing:(GMenu.menu_item -> unit) ->
    ?show:bool -> unit -> GMenu.image_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 deselect : callback:(unit -> unit) -> GtkSignal.id
      method destroy : callback:(unit -> unit) -> GtkSignal.id
      method remove : callback:(GObj.widget -> unit) -> GtkSignal.id
      method select : callback:(unit -> unit) -> GtkSignal.id
      method toggle : callback:(unit -> 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 right_justified : bool
      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_right_justified : bool -> unit
      method set_show_toggle : bool -> unit
      method set_submenu : menu -> unit
      method toggled : unit -> unit
    end
  val check_menu_item :
    ?label:string ->
    ?use_mnemonic:bool ->
    ?active:bool ->
    ?show_toggle:bool ->
    ?right_justified: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 right_justified : bool
      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_right_justified : bool -> unit
      method set_show_toggle : bool -> 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 ->
    ?show_toggle:bool ->
    ?right_justified: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 option_menu :
    ([> Gtk.option_menu ] as 'a) Gtk.obj ->
    object
      val obj : 'Gtk.obj
      method add : GObj.widget -> unit
      method all_children : GObj.widget list
      method as_widget : Gtk.widget Gtk.obj
      method border_width : int
      method child : GObj.widget
      method children : GObj.widget list
      method clicked : unit -> unit
      method coerce : GObj.widget
      method connect : GButton.button_signals
      method destroy : unit -> unit
      method drag : GObj.drag_ops
      method event : GObj.event_ops
      method focus : GContainer.focus
      method focus_on_click : bool
      method get_menu : GMenu.menu
      method get_oid : int
      method grab_default : unit -> unit
      method image : GObj.widget
      method image_position : GtkEnums.position_type
      method label : string
      method misc : GObj.misc_ops
      method relief : Gtk.Tags.relief_style
      method remove : GObj.widget -> unit
      method remove_menu : unit -> unit
      method resize_mode : Gtk.Tags.resize_mode
      method set_border_width : int -> unit
      method set_focus_on_click : bool -> unit
      method set_history : int -> unit
      method set_image : GObj.widget -> unit
      method set_image_position : GtkEnums.position_type -> unit
      method set_label : string -> unit
      method set_menu : GMenu.menu -> unit
      method set_relief : Gtk.Tags.relief_style -> unit
      method set_resize_mode : Gtk.Tags.resize_mode -> unit
      method set_use_stock : bool -> unit
      method set_use_underline : bool -> unit
      method set_xalign : float -> unit
      method set_yalign : float -> unit
      method unset_image : unit -> unit
      method use_stock : bool
      method use_underline : bool
      method xalign : float
      method yalign : float
    end
  val option_menu :
    ?menu:#GMenu.menu ->
    ?border_width:int ->
    ?width:int ->
    ?height:int ->
    ?packing:(GObj.widget -> unit) -> ?show:bool -> unit -> GMenu.option_menu
  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_image_item :
        ?image:GObj.widget ->
        ?key:Gdk.keysym ->
        ?callback:(unit -> unit) ->
        ?stock:GtkStock.id -> ?label:string -> unit -> GMenu.image_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_separator : unit -> GMenu.menu_item
      method add_submenu : ?key:Gdk.keysym -> string -> GMenu.menu
      method add_tearoff : unit -> GMenu.menu_item
      method private bind :
        ?modi:Gdk.Tags.modifier list ->
        ?key:Gdk.keysym ->
        ?callback:(unit -> unit) -> GMenu.menu_item -> string -> unit
      method menu : 'a
    end
end