<!-- ##### 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_ENUM: 
@GTK_TYPE_FLAGS: 
@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_BOXED: 
@GTK_TYPE_POINTER: 
@GTK_TYPE_SIGNAL: 

<!-- ##### MACRO GTK_CLASS_NAME ##### -->
<para>

</para>

@class: 


<!-- ##### MACRO GTK_CLASS_TYPE ##### -->
<para>

</para>

@class: 


<!-- ##### MACRO GTK_TYPE_IS_OBJECT ##### -->
<para>

</para>

@type: 


<!-- ##### 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>

<!-- # Unused Parameters # -->
@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>

<!-- # Unused Parameters # -->
@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>

<!-- # Unused Parameters # -->
@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>

<!-- # Unused Parameters # -->
@type_object: A GtkTypeObject object.
@otype: 


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

<!-- # Unused Parameters # -->
@type_class: A GtkTypeClass class.
@otype: 


<!-- ##### MACRO GTK_CHECK_GET_CLASS ##### -->
<para>

</para>



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

<!-- # Unused Parameters # -->
@type: 


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

@f: 


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


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


<!-- ##### 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*


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


<!-- ##### 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: 


<!-- ##### TYPEDEF 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>


<!-- ##### 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_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: 

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


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


<!-- ##### TYPEDEF GtkFlagValue ##### -->
<para>

</para>


<!-- ##### 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.
@gtkinfo: 
@Returns: the new GtkType.
<!-- # Unused Parameters # -->
@type_info: must not be null, and @type_info->type_name must also not be null.


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

@Returns: a pointer to the name of a type, or NULL if it has none.
<!-- # Unused Parameters # -->
@type: a GtkType


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

@Returns: a GtkType
<!-- # Unused Parameters # -->
@name: the name of a gtk type


<!-- ##### MACRO gtk_type_parent ##### -->
<para>

</para>

@Returns: the GtkType of the parent
<!-- # Unused Parameters # -->
@type: a GtkType


<!-- ##### 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_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


<!-- ##### MACRO 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>

@Returns: 
<!-- # Unused Parameters # -->
@type: GtkType
@is_a_type: GtkType


<!-- ##### 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>

@flags_type: 
@value_name: 
@Returns: GtkFlagValue*
<!-- # Unused Parameters # -->
@flag_type: GtkType


