<!-- ##### SECTION Title ##### -->
Types

<!-- ##### SECTION Short_Description ##### -->
Handle run-time type creation.

<!-- ##### SECTION Long_Description ##### -->
<para>
Gtk's type system is extensible.  Because of that, types have to be
managed at runtime.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### TYPEDEF GtkType ##### -->
<para>
@GtkType is unique integer identifying the type.  The guts of the
information about the type is held in a private struct named
GtkTypeNode.
</para>


<!-- ##### ENUM GtkFundamentalType ##### -->
<para>
@GtkFundamentalType is an enumerated type which lists all the possible
fundamental types (e.g. char, uchar, int, long, float, etc).
</para>

@GTK_TYPE_INVALID: 
@GTK_TYPE_NONE: 
@GTK_TYPE_CHAR: 
@GTK_TYPE_UCHAR: 
@GTK_TYPE_BOOL: 
@GTK_TYPE_INT: 
@GTK_TYPE_UINT: 
@GTK_TYPE_LONG: 
@GTK_TYPE_ULONG: 
@GTK_TYPE_FLOAT: 
@GTK_TYPE_DOUBLE: 
@GTK_TYPE_STRING: 
@GTK_TYPE_ENUM: 
@GTK_TYPE_FLAGS: 
@GTK_TYPE_BOXED: 
@GTK_TYPE_POINTER: 
@GTK_TYPE_SIGNAL: 
@GTK_TYPE_ARGS: 
@GTK_TYPE_CALLBACK: 
@GTK_TYPE_C_CALLBACK: 
@GTK_TYPE_FOREIGN: 
@GTK_TYPE_OBJECT: 

<!-- ##### MACRO GTK_TYPE_NUM_BUILTINS ##### -->
<para>
No idea.
</para>



<!-- ##### MACRO GTK_TYPE_FLAT_FIRST ##### -->
<para>
The first "flat" (no struct) enumerated type value.
</para>



<!-- ##### MACRO GTK_TYPE_FLAT_LAST ##### -->
<para>
The last "flat" (no struct) enumerated type value.
</para>



<!-- ##### MACRO GTK_TYPE_STRUCTURED_FIRST ##### -->
<para>
The first structured enumerated type value.
</para>



<!-- ##### MACRO GTK_TYPE_STRUCTURED_LAST ##### -->
<para>
The last structured enumerated type value.
</para>



<!-- ##### MACRO GTK_TYPE_FUNDAMENTAL_LAST ##### -->
<para>
The highest-numbered structured or flat enumerated type value.
</para>



<!-- ##### MACRO GTK_TYPE_FUNDAMENTAL_MAX ##### -->
<para>
The highest maximum fundamental enumerated type value.
</para>



<!-- ##### MACRO GTK_STRUCT_OFFSET ##### -->
<para>
Use in place of offsetof(), which is used if it exists.
</para>

@struct: The type of the structure.
@field: The field within the structure.


<!-- ##### MACRO GTK_CHECK_CAST ##### -->
<para>
Cast the object in @tobj into @cast.  If GTK_NO_CHECK_CASTS is
defined, just cast it.  Otherwise, check to see if we can cast @tobj
into a @cast.
</para>

@tobj: a pointer to a GtkObject.
@cast_type: a Gtk type.
@cast: a C type


<!-- ##### MACRO GTK_CHECK_CLASS_CAST ##### -->
<para>
Cast the object in @tobj into @cast.  If GTK_NO_CHECK_CASTS is
defined, just cast it.  Otherwise, check to see if we can cast @tobj
into a @cast.
</para>

@tclass: a pointer to a GtkClassInitFunc
@cast_type: a Gtk type.
@cast: a C type


<!-- ##### MACRO GTK_CHECK_TYPE ##### -->
<para>
Determines whether @type_object is a type of @otype.
</para>

@type_object: A GtkTypeObject object.
@otype: 


<!-- ##### MACRO GTK_CHECK_CLASS_TYPE ##### -->
<para>
Determines whether @type_class is a type of @otype.
</para>

@type_class: A GtkTypeClass class.
@otype: 


<!-- ##### MACRO GTK_TYPE_IDENTIFIER ##### -->
<para>
Hide the name of gtk_identifier_get_type
</para>



<!-- ##### FUNCTION gtk_identifier_get_type ##### -->
<para>
Get the type of GtkIdentifier.
</para>

@Returns: GtkType -- the enumerated type of something.


<!-- ##### MACRO GTK_TYPE_MAKE ##### -->
<para>
Combine a fundemantal type and a sequence number to create a gtk type.
</para>

@parent_t: 
@seqno: 


<!-- ##### MACRO GTK_FUNDAMENTAL_TYPE ##### -->
<para>
Convert a gtk type into a fundamental type
</para>

@type: 


<!-- ##### MACRO GTK_TYPE_SEQNO ##### -->
<para>
Convert a gtk type into its sequence number
</para>

@type: 


<!-- ##### MACRO GTK_SIGNAL_FUNC ##### -->
<para>
Just a macroized cast into a GtkSignalFunc
</para>

@f: 


<!-- ##### USER_FUNCTION GtkClassInitFunc ##### -->
<para>
Define a function pointer.
</para>

@klass: a gpointer


<!-- ##### USER_FUNCTION GtkObjectInitFunc ##### -->
<para>
Define a function pointer.
</para>

@object: a gpointer
@klass: a gpointer


<!-- ##### USER_FUNCTION GtkSignalFunc ##### -->
<para>
Define a function pointer.
</para>



<!-- ##### USER_FUNCTION GtkFunction ##### -->
<para>
Define a function pointer.
</para>

@data: gpointer
@Returns: gint


<!-- ##### USER_FUNCTION GtkDestroyNotify ##### -->
<para>
Define a function pointer.
</para>

@data: gpointer


<!-- ##### USER_FUNCTION GtkCallbackMarshal ##### -->
<para>
Define a function pointer.
</para>

@object: GtkObject*
@data: gpointer
@n_args: guint
@args: GtkArg*


<!-- ##### USER_FUNCTION GtkSignalMarshaller ##### -->
<para>
Define a function pointer.
</para>

@object: GtkObject*
@func: GtkSignalFunc
@func_data: gpointer
@args: GtkArg*


<!-- ##### USER_FUNCTION GtkArgGetFunc ##### -->
<para>
Define a function pointer.  Deprecated.
</para>

@object: 
@arg: 
@arg_id: 


<!-- ##### USER_FUNCTION GtkArgSetFunc ##### -->
<para>
Define a function pointer.  Deprecated.
</para>

@object: 
@arg: 
@arg_id: 


<!-- ##### STRUCT GtkTypeObject ##### -->
<para>
A GtkTypeObject defines the minimum structure requirements
for type instances. Type instances returned from gtk_type_new ()
and initialized through a GtkObjectInitFunc need to directly inherit
from this structure or at least copy its fields one by one.
</para>

@klass: 

<!-- ##### STRUCT GtkArg ##### -->
<para>
This is a structure that we use to pass in typed values (and names).
</para>

@type: 
@name: 

<!-- ##### MACRO GTK_VALUE_CHAR ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_CHAR
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_UCHAR ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_UCHAR
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_BOOL ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_BOOL
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_INT ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_INT
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_UINT ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_UINT
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_LONG ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_LONG
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_ULONG ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_ULONG
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_FLOAT ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_FLOAT
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_DOUBLE ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_DOUBLE
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_STRING ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_STRING
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_ENUM ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_ENUM
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_FLAGS ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_FLAGS
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_BOXED ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_BOXED
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_POINTER ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_POINTER
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_OBJECT ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_OBJECT
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_SIGNAL ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_SIGNAL
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_ARGS ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_ARGS
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_CALLBACK ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_CALLBACK
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_C_CALLBACK ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_C_CALLBACK
</para>

@a: 


<!-- ##### MACRO GTK_VALUE_FOREIGN ##### -->
<para>
Use to get the value of a GtkArg whose GtkType is GTK_TYPE_C_FOREIGN
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_CHAR ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_CHAR
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_UCHAR ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_UCHAR
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_BOOL ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_BOOL
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_INT ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_INT
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_UINT ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_UINT
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_LONG ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_LONG
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_ULONG ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_ULONG
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_FLOAT ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_FLOAT
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_DOUBLE ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_DOUBLE
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_STRING ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_STRING
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_ENUM ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_ENUM
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_FLAGS ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_FLAGS
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_BOXED ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_BOXED
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_POINTER ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_POINTER
</para>

@a: 


<!-- ##### MACRO GTK_RETLOC_OBJECT ##### -->
<para>
If the GtkArg contains a pointer to the value, this macro will be a pointer to a GTK_TYPE_OBJECT
</para>

@a: 


<!-- ##### STRUCT GtkTypeInfo ##### -->
<para>
Holds information about the type.  @gtk_type_name returns the name.
@object_size is somehow set to the number of bytes that an instance of
the object will occupy.  @class_init_func holds the type's
initialization function.  @object_init_func holds the initialization
function for an instance of the object.  @reserved_1 is used for
GtkEnumValue to hold the enumerated values.
</para>

@type_name: 
@object_size: 
@class_size: 
@class_init_func: 
@object_init_func: 
@reserved_1: 
@reserved_2: 
@base_class_init_func: 

<!-- ##### STRUCT GtkTypeQuery ##### -->
<para>
A structure used to return values from @gtk_type_query.
</para>

@type: 
@type_name: 
@object_size: 
@class_size: 

<!-- ##### STRUCT GtkTypeClass ##### -->
<para>
The base structure for a Gtk Type.  Every type inherits this as a base structure.
</para>


<!-- ##### STRUCT GtkEnumValue ##### -->
<para>
A structure which contains a single enum value, and its name, and it's
nickname.
</para>

@value: 
@value_name: 
@value_nick: 

<!-- ##### FUNCTION gtk_type_init ##### -->
<para>
Initialize the data structures associated with gtk types.
</para>



<!-- ##### FUNCTION gtk_type_unique ##### -->
<para>
Create a new, unique type.
</para>

@parent_type: if zero, a fundamental type is created.
@type_info: must not be null, and @type_info->type_name must also not be null.
@Returns: the new GtkType.


<!-- ##### FUNCTION gtk_type_set_chunk_alloc ##### -->
<para>
Set the mem_chunk size so it will hold @n_chunks of the objects of that @type.
</para>

@type: There must be an unlocked TypeNode associated with this type otherwise nothing happens.
@n_chunks: 


<!-- ##### FUNCTION gtk_type_name ##### -->
<para>
</para>

@type: a GtkType
@Returns: a pointer to the name of a type, or NULL if it has none.


<!-- ##### FUNCTION gtk_type_from_name ##### -->
<para>
Get the internal representation of a type given its name.
</para>

@name: the name of a gtk type
@Returns: a GtkType


<!-- ##### FUNCTION gtk_type_parent ##### -->
<para>

</para>

@type: a GtkType
@Returns: the GtkType of the parent


<!-- ##### FUNCTION gtk_type_class ##### -->
<para>
Return a gpointer pointing to the class of @type or NULL if there was
any trouble identifying @type.  Initialize the class if necessary.
</para>

@type: a GtkType
@Returns: gpointer to the klass.


<!-- ##### FUNCTION gtk_type_parent_class ##### -->
<para>
Return the class of the parent.  Initialize the class if necessary.
Return NULL if anything goes wrong.
</para>

@type: GtkType
@Returns: gpointer to the klass.


<!-- ##### FUNCTION gtk_type_children_types ##### -->
<para>
Return the pointer to the type's children's types.
</para>

@type: GtkType
@Returns: pointer to a GList


<!-- ##### FUNCTION gtk_type_new ##### -->
<para>
Create a new object of a given type, and return a gpointer to it.
Returns NULL if you give it an invalid type.  It allocates the object
out of the type's memory chunk if there is a memory chunk.  The object
has all the proper initializers called.
</para>

@type: GtkType
@Returns: gpointer to a GtkTypeObject


<!-- ##### FUNCTION gtk_type_free ##### -->
<para>
Given the type of an object and a pointer to it, the object is freed.
</para>

@type: GtkType
@mem: gpointer to the object


<!-- ##### FUNCTION gtk_type_describe_heritage ##### -->
<para>
Print the types @type inherits from.
</para>

@type: GtkType


<!-- ##### FUNCTION gtk_type_describe_tree ##### -->
<para>
Given a @type, describe all of its children, and their children.  Only
show the size if @show_size is true.
</para>

@type: GtkType
@show_size: gboolean


<!-- ##### FUNCTION gtk_type_is_a ##### -->
<para>
Look in the type hierarchy to see if @type has @is_a_type among its
ancestors.  Do so with a simple lookup, not a loop.
</para>

@type: GtkType
@is_a_type: GtkType
@Returns: 


<!-- ##### FUNCTION gtk_type_check_object_cast ##### -->
<para>
Given a pointer to a GtkTypeObject @type_object, and a GtkType @cast_type,
make sure that it's okay to cast @type_object into a @cast_type.
</para>

@type_object: GtkTypeObject*
@cast_type: GtkType
@Returns: the same GtkTypeObject* as @type_object


<!-- ##### FUNCTION gtk_type_check_class_cast ##### -->
<para>
Given a GtkTypeClass pointer @klass, and a GtkType @cast_type, make
sure that it's okay to cast something of that @klass into a @cast_type.
</para>

@klass: GtkTypeClass*
@cast_type: GtkType
@Returns: Always return @klass.


<!-- ##### FUNCTION gtk_type_register_enum ##### -->
<para>
Register a new set of enum @values and give them the name in
@type_name.
</para>

@type_name: must not be null.
@values: GtkEnumValue*
@Returns: 


<!-- ##### FUNCTION gtk_type_register_flags ##### -->
<para>
Register a new set of flags @values and give them the name in
@type_name.
</para>

@type_name: must not be null.
@values: GtkFlagValue*
@Returns: 


<!-- ##### FUNCTION gtk_type_enum_get_values ##### -->
<para>
If @enum_type has values, then return a pointer to all of them.
</para>

@enum_type: GtkType
@Returns: GtkEnumValue*


<!-- ##### FUNCTION gtk_type_flags_get_values ##### -->
<para>
If @flags_type has values, then return a pointer to all of them.
</para>

@flags_type: 
@Returns: GtkFlagValue*


<!-- ##### FUNCTION gtk_type_enum_find_value ##### -->
<para>
Return a pointer to one of @enum_type's GtkEnumValues's whose name (or nickname) matches @value_name.
</para>

@enum_type: GtkType
@value_name: 
@Returns: GtkEnumValue*


<!-- ##### FUNCTION gtk_type_flags_find_value ##### -->
<para>
Return a pointer to one of @flag_type's GtkFlagValue's whose name (or nickname) matches @value_name.
</para>

@flag_type: GtkType
@value_name: 
@Returns: GtkFlagValue*


<!-- ##### FUNCTION gtk_type_set_varargs_type ##### -->
<para>
Set the varargs type for a fundamental type @foreign_type.
</para>

@foreign_type: Must be a GtkType with a sequence number of zero.  Must not be a
fundamental type.
@varargs_type: Must be a GtkType which is either structured or flag, or NONE.


<!-- ##### FUNCTION gtk_type_get_varargs_type ##### -->
<para>
Get the varargs type associated with @foreign_type
</para>

@foreign_type: GtkType
@Returns: GtkType


<!-- ##### FUNCTION gtk_type_query ##### -->
<para>
Given a type, return various interesting parameters of the type.
</para>

@type: GtkType
@Returns: GtkTypeQuery*


