Implementation of Object Properties
Utility function to manipulate lists of named, typed arguments.
All the functions in here are marked a Non-public.
We describe it anyway because it is occasionally useful
to understand how the work is done.
Arguments are a way of describing a named parameter to a function.
They have two important roles within gtk+:
they describe object properties.
This means that they present an interface to get and set a named-type
for any type of object in a consistent way.
(All the relevant functions to do this start with gtk_object_set
or gtk_object_get).
they describe signal arguments.
This is a lot less often needed but still useful.
Usually if you are just emitting or creating a particular signal
it is more convenient to just use gtk_signal_emit() or gtk_signal_new().
However if you are writing a function to emit or create an arbitrary
signal, you must use gtk_signal_emitv() or gtk_signal_newv().
#GtkObject.
A structure containing information about the argument.
Returned by gtk_arg_get_info().
@class_type: if the argument is an object, this is the object class type.
@name: the name of the argument.
@type: the type of the argument; it may be an object's type
or a fundamental type.
@arg_flags: flags applicable to the argument (i.e. readable, writable,
and whether it needs to be constructed).
@full_name: the object name and argument name separated by ::,
e.g. "GtkObject::user_data" or "GtkButton::label".
@arg_id: the unique argument identified.
@seq_id: ???
Creates a new argument of a certain type, set to 0 or NULL.
@arg_type: the type of the argument.
@Returns: the newly created #GtkArg.
It will either copy data into an existing argument or allocate a new argument
and copy the data. Strings are duplicated. All other pointers and
values are copied (shallowly-- that is the pointers themselves are
copied, not the data they point to.)
You should call gtk_arg_reset() on dest_arg before calling this
if the argument may contain string data that you want freed.
@src_arg: the argument to duplicate.
@dest_arg: the argument to copy over (or NULL to create a new #GtkArg).
@Returns: the new #GtkArg (or dest_arg, if it was not NULL).
Frees the argument, and optionally its contents.
@arg: the argument to free.
@free_contents: whether to free the string, if it is a string.
Private: given a hashtable of argument information it takes a vararg
list and parses it into arguments (in the form of lists of #GtkArgs
and lists of #GtkArgInfos.
The list of arguments starts with first_arg_name then the first argument's
value. Followed by any number of additional name/argument pairs,
terminated with NULL.
@object_type: the type of object we are collecting arguments for.
@arg_info_hash_table: a hashtable mapping from names of arguments
to their #GtkArgInfos.
@arg_list_p: a returned list of arguments obtained from parsing the
varargs.
@info_list_p: a returned list of the #GtkArgInfos.
@first_arg_name: the name of the first argument.
@var_args: a va_list containing the value of the first argument,
followed by name/value pairs, followed by NULL.
@Returns: an error message on failure, or NULL otherwise.
Private: erase lists of arguments returned from gtk_args_collect().
@arg_list: arg_list_p returned from gtk_args_collect().
@info_list: info_list_p returned from gtk_args_collect().
Private: get information about an argument.
@object_type: the type of object.
@arg_info_hash_table: the hashtable of #GtkArgInfos.
@arg_name: the name of the argument to lookup.
@info_p: the argument info.
@Returns: an error message on failure, or NULL otherwise.
Create a new argument registered with a class.
@base_class_type: the basic type having the arguments, almost alway
GTK_TYPE_OBJECT, except if your defining a different type argument
that gets a different namespace. #GtkContainer does this to define
per-child arguments of the container.
@arg_name: name of the argument to create. (must be a static constant string)
@class_n_args_offset: offset into the base class structure that tells
the number of arguments.
@arg_info_hash_table: hashtable of #GtkArgInfos.
@arg_type: type of the argument.
@arg_flags: flags of the argument.
@arg_id: ???
@Returns: the new #GtkArgInfo.
Private: from a class type and its arginfo hashtable,
get an array of #GtkArgs that this object accepts.
@class_type: the class type.
@arg_info_hash_table: the hashtable of #GtkArgInfos.
@arg_flags: returned array of argument flags.
@n_args_p: the number of arguments this object accepts.
@Returns: the array of arguments (or NULL on error).
Given a fully qualified argument name (e.g. "GtkButton::label")
it returns just the argument name (e.g. "label") unless
the argument name was invalid, in which case it returns NULL.
@arg_name: the fully-qualified argument name.
@Returns: the base argument name.
A #GCompareFunc for hashing #GtkArgInfos.
@arg_info_1: a #GtkArgInfo.
@arg_info_2: a #GtkArgInfo.
@Returns: whether the arguments are the same.
A #GHashFunc for hashing #GtkArgInfos.
@arg_info: a #GtkArgInfo.
@Returns: a hash value for that #GtkArgInfo.