glib/docs/reference/glib/tmpl/hooks.sgml

471 lines
12 KiB
Plaintext
Raw Normal View History

1999-08-16 17:58:30 +00:00
<!-- ##### SECTION Title ##### -->
Hook Functions
<!-- ##### SECTION Short_Description ##### -->
support for manipulating lists of hook functions
1999-08-16 17:58:30 +00:00
<!-- ##### SECTION Long_Description ##### -->
<para>
The #GHookList, #GHook and their related functions provide support for
lists of hook functions. Functions can be added and removed from the lists,
and the list of hook functions can be invoked.
1999-08-16 17:58:30 +00:00
</para>
<!-- ##### SECTION See_Also ##### -->
<para>
</para>
<!-- ##### SECTION Stability_Level ##### -->
2010-04-19 17:30:42 -04:00
<!-- ##### SECTION Image ##### -->
1999-08-16 17:58:30 +00:00
<!-- ##### STRUCT GHookList ##### -->
<para>
The <structname>GHookList</structname> struct represents a
list of hook functions.
1999-08-16 17:58:30 +00:00
</para>
@seq_id: the next free #GHook id
@hook_size: the size of the #GHookList elements, in bytes
@is_setup: 1 if the #GHookList has been initialized
@hooks: the first #GHook element in the list
2007-10-16 06:33:50 +00:00
@dummy3: unused
@finalize_hook: the function to call to finalize a #GHook element. The
default behaviour is to call the hooks <function>destroy</function> function
@dummy: unused
<!-- ##### USER_FUNCTION GHookFinalizeFunc ##### -->
<para>
Defines the type of function to be called when a hook in a
list of hooks gets finalized.
</para>
@hook_list: a #GHookList
@hook: the hook in @hook_list that gets finalized
1999-08-16 17:58:30 +00:00
<!-- ##### STRUCT GHook ##### -->
<para>
The <structname>GHook</structname> struct represents a single hook
function in a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@data: data which is passed to func when this hook is invoked
@next: pointer to the next hook in the list
@prev: pointer to the previous hook in the list
@ref_count: the reference count of this hook
@hook_id: the id of this hook, which is unique within its list
@flags: flags which are set for this hook. See #GHookFlagMask for
predefined flags
@func: the function to call when this hook is invoked. The possible
signatures for this function are #GHookFunc and #GHookCheckFunc
@destroy: the default <function>finalize_hook</function> function of a
#GHookList calls this member of the hook that is being finalized
1999-08-16 17:58:30 +00:00
<!-- ##### USER_FUNCTION GHookFunc ##### -->
<para>
Defines the type of a hook function that can be invoked
by g_hook_list_invoke().
1999-08-16 17:58:30 +00:00
</para>
@data: the data field of the #GHook is passed to the hook function here
1999-08-16 17:58:30 +00:00
<!-- ##### USER_FUNCTION GHookCheckFunc ##### -->
<para>
Defines the type of a hook function that can be invoked
by g_hook_list_invoke_check().
</para>
@data: the data field of the #GHook is passed to the hook function here
@Returns: %FALSE if the #GHook should be destroyed
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_list_init ##### -->
<para>
Initializes a #GHookList.
This must be called before the #GHookList is used.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook_size: the size of each element in the #GHookList, typically
<literal>sizeof (GHook)</literal>
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_list_invoke ##### -->
<para>
Calls all of the #GHook functions in a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@may_recurse: %TRUE if functions which are already running (e.g. in another
thread) can be called. If set to %FALSE, these are skipped
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_list_invoke_check ##### -->
<para>
Calls all of the #GHook functions in a #GHookList.
Any function which returns %FALSE is removed from the #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@may_recurse: %TRUE if functions which are already running (e.g. in another
thread) can be called. If set to %FALSE, these are skipped
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_list_marshal ##### -->
<para>
Calls a function on each valid #GHook.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@may_recurse: %TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to %FALSE, these are skipped
@marshaller: the function to call for each #GHook
@marshal_data: data to pass to @marshaller
1999-08-16 17:58:30 +00:00
<!-- ##### USER_FUNCTION GHookMarshaller ##### -->
1999-08-16 17:58:30 +00:00
<para>
Defines the type of function used by g_hook_list_marshal().
</para>
1999-08-16 17:58:30 +00:00
@hook: a #GHook
@marshal_data: user data
<!-- ##### FUNCTION g_hook_list_marshal_check ##### -->
<para>
Calls a function on each valid #GHook and destroys it if the
function returns %FALSE.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@may_recurse: %TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to %FALSE, these are skipped
@marshaller: the function to call for each #GHook
@marshal_data: data to pass to @marshaller
<!-- ##### USER_FUNCTION GHookCheckMarshaller ##### -->
<para>
Defines the type of function used by g_hook_list_marshal_check().
</para>
@hook: a #GHook
@marshal_data: user data
@Returns: %FALSE if @hook should be destroyed
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_list_clear ##### -->
<para>
Removes all the #GHook elements from a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_alloc ##### -->
<para>
Allocates space for a #GHook and initializes it.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@Returns: a new #GHook
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO g_hook_append ##### -->
<para>
Appends a #GHook onto the end of a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to add to the end of @hook_list
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_prepend ##### -->
<para>
Prepends a #GHook on the start of a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to add to the start of @hook_list
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_insert_before ##### -->
<para>
Inserts a #GHook into a #GHookList, before a given #GHook.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@sibling: the #GHook to insert the new #GHook before
@hook: the #GHook to insert
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_insert_sorted ##### -->
<para>
Inserts a #GHook into a #GHookList, sorted by the given function.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to insert
@func: the comparison function used to sort the #GHook elements
1999-08-16 17:58:30 +00:00
<!-- ##### USER_FUNCTION GHookCompareFunc ##### -->
<para>
Defines the type of function used to compare #GHook elements in
g_hook_insert_sorted().
1999-08-16 17:58:30 +00:00
</para>
@new_hook: the #GHook being inserted
@sibling: the #GHook to compare with @new_hook
@Returns: a value &lt;= 0 if @new_hook should be before @sibling
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_compare_ids ##### -->
<para>
Compares the ids of two #GHook elements, returning a negative value
if the second id is greater than the first.
1999-08-16 17:58:30 +00:00
</para>
@new_hook: a #GHook
@sibling: a #GHook to compare with @new_hook
@Returns: a value &lt;= 0 if the id of @sibling is >= the id of @new_hook
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_get ##### -->
<para>
Returns the #GHook with the given id, or %NULL if it is not found.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook_id: a hook id
@Returns: the #GHook with the given id, or %NULL if it is not found
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_find ##### -->
<para>
Finds a #GHook in a #GHookList using the given function to test for a match.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@need_valids: %TRUE if #GHook elements which have been destroyed should be
skipped
@func: the function to call for each #GHook, which should return %TRUE when
the #GHook has been found
@data: the data to pass to @func
@Returns: the found #GHook or %NULL if no matching #GHook is found
<!-- ##### USER_FUNCTION GHookFindFunc ##### -->
<para>
Defines the type of the function passed to g_hook_find().
</para>
@hook: a #GHook
@data: user data passed to g_hook_find_func()
@Returns: %TRUE if the required #GHook has been found
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_find_data ##### -->
<para>
Finds a #GHook in a #GHookList with the given data.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@need_valids: %TRUE if #GHook elements which have been destroyed should be
skipped
@data: the data to find
@Returns: the #GHook with the given @data or %NULL if no matching
#GHook is found
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_find_func ##### -->
<para>
Finds a #GHook in a #GHookList with the given function.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@need_valids: %TRUE if #GHook elements which have been destroyed should be
skipped
@func: the function to find
@Returns: the #GHook with the given @func or %NULL if no matching
#GHook is found
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_find_func_data ##### -->
<para>
Finds a #GHook in a #GHookList with the given function and data.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@need_valids: %TRUE if #GHook elements which have been destroyed should be
skipped
@func: the function to find
@data: the data to find
@Returns: the #GHook with the given @func and @data or %NULL if no matching
#GHook is found
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_first_valid ##### -->
<para>
Returns the first #GHook in a #GHookList which has not been destroyed.
The reference count for the #GHook is incremented, so you must call
g_hook_unref() to restore it when no longer needed. (Or call
g_hook_next_valid() if you are stepping through the #GHookList.)
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@may_be_in_call: %TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to %FALSE, these are skipped
@Returns: the first valid #GHook, or %NULL if none are valid
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_next_valid ##### -->
<para>
Returns the next #GHook in a #GHookList which has not been destroyed.
The reference count for the #GHook is incremented, so you must call
g_hook_unref() to restore it when no longer needed. (Or continue to call
g_hook_next_valid() until %NULL is returned.)
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the current #GHook
@may_be_in_call: %TRUE if hooks which are currently running (e.g. in another
thread) are considered valid. If set to %FALSE, these are skipped
@Returns: the next valid #GHook, or %NULL if none are valid
1999-08-16 17:58:30 +00:00
<!-- ##### ENUM GHookFlagMask ##### -->
<para>
Flags used internally in the #GHook implementation.
1999-08-16 17:58:30 +00:00
</para>
@G_HOOK_FLAG_ACTIVE: set if the hook has not been destroyed
@G_HOOK_FLAG_IN_CALL: set if the hook is currently being run
@G_HOOK_FLAG_MASK: A mask covering all bits reserved for
2005-06-30 03:13:35 +00:00
hook flags; see #G_HOOK_FLAGS_USER_SHIFT
<!-- ##### MACRO G_HOOK_FLAGS ##### -->
<para>
Returns the flags of a hook.
</para>
@hook: a #GHook
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO G_HOOK_FLAG_USER_SHIFT ##### -->
<para>
The position of the first bit which is not reserved for internal
use be the #GHook implementation, i.e.
<literal>1 &lt;&lt; G_HOOK_FLAG_USER_SHIFT</literal> is the first bit
which can be used for application-defined flags.
1999-08-16 17:58:30 +00:00
</para>
<!-- ##### MACRO G_HOOK ##### -->
<para>
Casts a pointer to a <literal>GHook*</literal>.
</para>
@hook: a pointer
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO G_HOOK_IS_VALID ##### -->
<para>
Returns %TRUE if the #GHook is valid, i.e. it is in a #GHookList, it is active
and it has not been destroyed.
1999-08-16 17:58:30 +00:00
</para>
@hook: a #GHook
@Returns: %TRUE if the #GHook is valid
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO G_HOOK_ACTIVE ##### -->
<para>
Returns %TRUE if the #GHook is active, which is normally %TRUE until the #GHook
is destroyed.
1999-08-16 17:58:30 +00:00
</para>
@hook: a #GHook
@Returns: %TRUE if the #GHook is active
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO G_HOOK_IN_CALL ##### -->
<para>
Returns %TRUE if the #GHook function is currently executing.
1999-08-16 17:58:30 +00:00
</para>
@hook: a #GHook
@Returns: %TRUE if the #GHook function is currently executing
1999-08-16 17:58:30 +00:00
<!-- ##### MACRO G_HOOK_IS_UNLINKED ##### -->
<para>
Returns %TRUE if the #GHook is not in a #GHookList.
1999-08-16 17:58:30 +00:00
</para>
@hook: a #GHook
@Returns: %TRUE if the #GHook is not in a #GHookList
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_ref ##### -->
<para>
Increments the reference count for a #GHook.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to increment the reference count of
2004-11-12 17:15:54 +00:00
@Returns: the @hook that was passed in (since 2.6)
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_unref ##### -->
<para>
Decrements the reference count of a #GHook.
If the reference count falls to 0, the #GHook is removed from the #GHookList
and g_hook_free() is called to free it.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to unref
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_free ##### -->
<para>
Calls the #GHookList @finalize_hook function if it exists, and frees the memory
allocated for the #GHook.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to free
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_destroy ##### -->
<para>
Destroys a #GHook, given its ID.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook_id: a hook ID
@Returns: %TRUE if the #GHook was found in the #GHookList and destroyed
1999-08-16 17:58:30 +00:00
<!-- ##### FUNCTION g_hook_destroy_link ##### -->
<para>
Removes one #GHook from a #GHookList, marking it inactive and calling
g_hook_unref() on it.
1999-08-16 17:58:30 +00:00
</para>
@hook_list: a #GHookList
@hook: the #GHook to remove
1999-08-16 17:58:30 +00:00