sig
  class virtual ['a, 'b, 'c, 'd] callback :
    object
      method virtual custom_decode_iter : '-> '-> '-> 'a
      method virtual custom_encode_iter : '-> 'b * 'c * 'd
      method virtual custom_get_column_type : int -> Gobject.g_type
      method virtual custom_get_iter : Gtk.tree_path -> 'a option
      method virtual custom_get_path : '-> Gtk.tree_path
      method virtual custom_get_value : '-> int -> Gobject.g_value -> unit
      method virtual custom_iter_children : 'a option -> 'a option
      method virtual custom_iter_has_child : '-> bool
      method virtual custom_iter_n_children : 'a option -> int
      method virtual custom_iter_next : '-> 'a option
      method virtual custom_iter_nth_child : 'a option -> int -> 'a option
      method virtual custom_iter_parent : '-> 'a option
      method virtual custom_n_columns : int
      method custom_ref_node : '-> unit
      method custom_unref_node : '-> unit
    end
  external create : unit -> Gtk.tree_model_custom = "ml_custom_model_create"
  external register_callback :
    Gtk.tree_model_custom ->
    ('a, 'b, 'c, 'd) #GtkTree.CustomModel.callback -> unit
    = "ml_register_custom_model_callback_object"
  external custom_row_inserted :
    Gtk.tree_model_custom -> Gtk.tree_path -> '-> unit
    = "ml_custom_model_row_inserted"
  external custom_row_changed :
    Gtk.tree_model_custom -> Gtk.tree_path -> '-> unit
    = "ml_custom_model_row_changed"
  external custom_row_has_child_toggled :
    Gtk.tree_model_custom -> Gtk.tree_path -> '-> unit
    = "ml_custom_model_row_has_child_toggled"
  external custom_row_deleted : Gtk.tree_model_custom -> '-> unit
    = "ml_custom_model_row_deleted"
  external custom_rows_reordered :
    Gtk.tree_model_custom -> Gtk.tree_path -> 'a option -> int array -> unit
    = "ml_custom_model_rows_reordered"
end