let add_item (factory:GMenu.menu GMenu.factory) ~callback name arg_opt =
    match arg_opt with
      | None -> (* add the menu item, but it isn't sensitive *)
          let item = factory#add_item name ~callback:(fun () -> ())
          in item#misc#set_sensitive false
      | Some arg -> (* add the menu item with its callback *)
          ignore (factory#add_item name ~callback:(fun () -> callback arg))