From 3cc60a9ab1df2dcf393a15b8a66e0602817646bd Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Fri, 3 Nov 2000 08:18:09 +0000 Subject: [PATCH] prefix internal functions with '_'. renamed g_signal_connect_closure() to Fri Nov 3 07:35:00 2000 Tim Janik * gsignal.[hc]: prefix internal functions with '_'. renamed g_signal_connect_closure() to g_signal_connect_closure_by_id(). added g_signal_parse_name() to retrive signal_id and detail quark from a signal name (internal). Fri Nov 3 07:33:15 2000 Tim Janik * gobject/gobject-docs.sgml: added &gobject-closures; section. * gobject/Makefile.am (tmpl_sources): add tmpl/clsoures.sgml * gobject/gobject-sections.txt: added Closure section. * gobject/tmpl/closures.sgml: new file with template description for GClosure functions. --- docs/reference/ChangeLog | 11 + docs/reference/glib/tmpl/caches.sgml | 5 +- docs/reference/glib/tmpl/glib-unused.sgml | 11 + docs/reference/glib/tmpl/hash_tables.sgml | 16 +- docs/reference/glib/tmpl/relations.sgml | 2 + docs/reference/gobject/Makefile.am | 1 + docs/reference/gobject/gobject-docs.sgml | 2 + docs/reference/gobject/gobject-sections.txt | 33 ++- docs/reference/gobject/tmpl/closures.sgml | 237 ++++++++++++++++++ .../gobject/tmpl/gobject-unused.sgml | 26 ++ docs/reference/gobject/tmpl/signals.sgml | 144 +++++------ gobject/ChangeLog | 7 + gobject/gclosure.h | 2 +- gobject/gobject.c | 4 +- gobject/gsignal.c | 90 ++++++- gobject/gsignal.h | 11 +- 16 files changed, 498 insertions(+), 104 deletions(-) create mode 100644 docs/reference/gobject/tmpl/closures.sgml diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 639acca5e..8b658402d 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,14 @@ +Fri Nov 3 07:33:15 2000 Tim Janik + + * gobject/gobject-docs.sgml: added &gobject-closures; section. + + * gobject/Makefile.am (tmpl_sources): add tmpl/clsoures.sgml + + * gobject/gobject-sections.txt: added Closure section. + + * gobject/tmpl/closures.sgml: new file with template description + for GClosure functions. + 2000-11-02 Sebastian Wilhelmi * glib/tmpl/glib-unused.sgml: Remove superfluous GSearchFunc. diff --git a/docs/reference/glib/tmpl/caches.sgml b/docs/reference/glib/tmpl/caches.sgml index fff9fe900..119b732f6 100644 --- a/docs/reference/glib/tmpl/caches.sgml +++ b/docs/reference/glib/tmpl/caches.sgml @@ -51,10 +51,11 @@ called by g_cache_remove() when the object is no longer needed (i.e. its reference count drops to 0). @hash_key_func: a function to create a hash value from a key. @hash_value_func: a function to create a hash value from a value. +@key_compare_func: +@Returns: a new #GCache. + @key_equal_func: a function to compare two keys. It should return TRUE if the two keys are equivalent. -@Returns: a new #GCache. - diff --git a/docs/reference/glib/tmpl/glib-unused.sgml b/docs/reference/glib/tmpl/glib-unused.sgml index 4387d5a83..4ee604a83 100644 --- a/docs/reference/glib/tmpl/glib-unused.sgml +++ b/docs/reference/glib/tmpl/glib-unused.sgml @@ -65,6 +65,17 @@ Turns the argument into a string literal by using the '#' stringizing operator. + + +Specifies the type of a function used to test two values for +equality. The function should return TRUE if both values are equal and +FALSE otherwise. + + +@a: a value. +@b: a value to compare with. +@Returns: TRUE if @a = @b; FALSE otherwise. + diff --git a/docs/reference/glib/tmpl/hash_tables.sgml b/docs/reference/glib/tmpl/hash_tables.sgml index 0f03a9596..edbab1812 100644 --- a/docs/reference/glib/tmpl/hash_tables.sgml +++ b/docs/reference/glib/tmpl/hash_tables.sgml @@ -69,13 +69,15 @@ Hash values are used to determine where keys are stored within the #GHashTable data structure. The g_direct_hash(), g_int_hash() and g_str_hash() functions are provided for some common types of keys. If hash_func is NULL, g_direct_hash() is used. +@key_compare_func: +@Returns: a new #GHashTable. + @key_equal_func: a function to check two keys for equality. This is used when looking up keys in the #GHashTable. The g_direct_equal(), g_int_equal() and g_str_equal() functions are provided for the most common types of keys. If @key_equal_func is NULL, keys are compared directly in a similar fashion to g_direct_equal(), but without the overhead of a function call. -@Returns: a new #GHashTable. @@ -102,18 +104,6 @@ lookup. @Returns: the hash value corresponding to the key. - - -Specifies the type of a function used to test two values for -equality. The function should return TRUE if both values are equal and -FALSE otherwise. - - -@a: a value. -@b: a value to compare with. -@Returns: TRUE if @a = @b; FALSE otherwise. - - Inserts a new key and value into a #GHashTable. diff --git a/docs/reference/glib/tmpl/relations.sgml b/docs/reference/glib/tmpl/relations.sgml index ee34ddea9..d6bc52504 100644 --- a/docs/reference/glib/tmpl/relations.sgml +++ b/docs/reference/glib/tmpl/relations.sgml @@ -83,6 +83,8 @@ Note that this must be called before any records are added to the #GRelation. @relation: a #GRelation. @field: the field to index, counting from 0. @hash_func: a function to produce a hash value from the field data. +@key_compare_func: + @key_equal_func: a function to compare two values of the given field. diff --git a/docs/reference/gobject/Makefile.am b/docs/reference/gobject/Makefile.am index 0d0dbe450..b724314a1 100644 --- a/docs/reference/gobject/Makefile.am +++ b/docs/reference/gobject/Makefile.am @@ -22,6 +22,7 @@ tmpl_sources = \ tmpl/objects.sgml \ tmpl/param_specs.sgml \ tmpl/signals.sgml \ + tmpl/closures.sgml \ tmpl/standard_params.sgml \ tmpl/types.sgml \ tmpl/value_collection.sgml \ diff --git a/docs/reference/gobject/gobject-docs.sgml b/docs/reference/gobject/gobject-docs.sgml index 9c88b6b2f..bcec163d0 100644 --- a/docs/reference/gobject/gobject-docs.sgml +++ b/docs/reference/gobject/gobject-docs.sgml @@ -4,6 +4,7 @@ + @@ -71,6 +72,7 @@ &gobject-param-specs; &gobject-standard-params; &gobject-signals; + &gobject-closures; diff --git a/docs/reference/gobject/gobject-sections.txt b/docs/reference/gobject/gobject-sections.txt index 8046cd623..8da78deef 100644 --- a/docs/reference/gobject/gobject-sections.txt +++ b/docs/reference/gobject/gobject-sections.txt @@ -336,7 +336,7 @@ g_signal_lookup g_signal_name g_signal_query g_signal_list_ids -g_signal_connect_closure +g_signal_connect_closure_by_id g_signal_handler_block g_signal_handler_unblock g_signal_handler_disconnect @@ -349,6 +349,33 @@ g_signal_stop_emission g_signal_type_closure_new g_signal_add_emission_hook_full g_signal_remove_emission_hook -g_signal_handlers_destroy -g_signals_destroy +g_signal_parse_name + + +
+Closures +closures +GClosureMarshal +GClosureNotify +GClosure +GCClosure +GClosureNotifyData +G_CLOSURE_NEEDS_MARSHAL +G_CCLOSURE_SWAP_DATA +g_cclosure_new +g_cclosure_new_swap +g_cclosure_new_object +g_cclosure_new_object_swap +g_closure_ref +g_closure_unref +g_closure_invoke +g_closure_invalidate +g_closure_add_fnotify +g_closure_remove_fnotify +g_closure_add_inotify +g_closure_remove_inotify +g_closure_new_simple +g_closure_set_marshal +g_closure_add_marshal_guards +g_closure_set_meta_marshal
diff --git a/docs/reference/gobject/tmpl/closures.sgml b/docs/reference/gobject/tmpl/closures.sgml new file mode 100644 index 000000000..9deee480d --- /dev/null +++ b/docs/reference/gobject/tmpl/closures.sgml @@ -0,0 +1,237 @@ + +Closures + + + + + + + + + + + + + + + + + + + +@closure: +@return_value: +@n_param_values: +@param_values: +@invocation_hint: +@marshal_data: + + + + + + + +@data: +@closure: + + + + + + + +@is_invalid: + + + + + + +@closure: +@callback: + + + + + + +@data: +@notify: + + + + + + +@closure: + + + + + + + +@cclosure: + + + + + + + +@callback_func: +@user_data: +@destroy_data: +@Returns: + + + + + + + +@callback_func: +@user_data: +@destroy_data: +@Returns: + + + + + + + +@callback_func: +@object: +@Returns: + + + + + + + +@callback_func: +@object: +@Returns: + + + + + + + +@closure: +@Returns: + + + + + + + +@closure: + + + + + + + +@closure: +@return_value: +@n_param_values: +@param_values: +@invocation_hint: + + + + + + + +@closure: + + + + + + + +@closure: +@notify_data: +@notify_func: + + + + + + + +@closure: +@notify_data: +@notify_func: + + + + + + + +@closure: +@notify_data: +@notify_func: + + + + + + + +@closure: +@notify_data: +@notify_func: + + + + + + + +@sizeof_closure: +@data: +@Returns: + + + + + + + +@closure: +@marshal: + + + + + + + +@closure: +@pre_marshal_data: +@pre_marshal_notify: +@post_marshal_data: +@post_marshal_notify: + + + + + + + +@closure: +@marshal_data: +@meta_marshal: + + diff --git a/docs/reference/gobject/tmpl/gobject-unused.sgml b/docs/reference/gobject/tmpl/gobject-unused.sgml index 21d3b02e0..283510798 100644 --- a/docs/reference/gobject/tmpl/gobject-unused.sgml +++ b/docs/reference/gobject/tmpl/gobject-unused.sgml @@ -10,3 +10,29 @@ @G_SIGNAL_ACTION: @G_SIGNAL_NO_HOOKS: + + + + + +@instance: +@signal_id: +@detail: +@closure: +@after: +@Returns: + + + + + + +@instance: + + + + + + +@itype: + diff --git a/docs/reference/gobject/tmpl/signals.sgml b/docs/reference/gobject/tmpl/signals.sgml index 5f3c35118..3ed1a8d86 100644 --- a/docs/reference/gobject/tmpl/signals.sgml +++ b/docs/reference/gobject/tmpl/signals.sgml @@ -24,7 +24,7 @@ handler" or "default (signal) handler", while user provided callbacks are usually just called "signal handler". The object method handler is provided at signal creation time (this most frequently happens at the end of an object class' creation), while user -provided handlers are frequently @connected and @disconnected to/from a certain +provided handlers are frequently connected and disconnected to/from a certain signal on certain object instances.
@@ -76,9 +76,9 @@ The @GSignalInvocationHint structure is used to pass on additional information to callbacks during a signal emission. -@signal_id: The signal id of the signal invoking the callback -@detail: The detail passed on for this emission -@run_type: The stage the signal emission is currently in, this +@signal_id: The signal id of the signal invoking the callback +@detail: The detail passed on for this emission +@run_type: The stage the signal emission is currently in, this field will contain one of @G_SIGNAL_RUN_FIRST, @G_SIGNAL_RUN_LAST or @G_SIGNAL_RUN_CLEANUP. @@ -92,11 +92,11 @@ values is perfomed. The return value of signal emissions is then the value returned by the last callback.
-@ihint: Signal invokation hint, see @GSignalInvocationHint -@return_accu: Accumulator to collect callback return values in, this +@ihint: Signal invokation hint, see @GSignalInvocationHint +@return_accu: Accumulator to collect callback return values in, this is the return value of the current signal emission -@return_value: The return value of the most recent callback function -@Returns: The accumulator function returns whether the signal emission +@return_value: The return value of the most recent callback function +@Returns: The accumulator function returns whether the signal emission should be aborted. Returning @FALSE means to abort the current emission and @TRUE is returned for continuation. @@ -153,14 +153,14 @@ A structure holding in-depth information for a specific signal. It is filled in by the g_signal_query() function. -@signal_id: The signal id of the signal being querried, or 0 if the +@signal_id: The signal id of the signal being querried, or 0 if the signal to be querried was unknown -@signal_name: The signal name -@itype: The interface/instance type that this signal can be emitted for -@signal_flags: The signal flags as passed in to @g_signal_new() -@return_type: The return type for user callbacks -@n_params: The number of parameters that user callbacks take -@param_types: The individual parameter types for user callbacks, note that the +@signal_name: The signal name +@itype: The interface/instance type that this signal can be emitted for +@signal_flags: The signal flags as passed in to @g_signal_new() +@return_type: The return type for user callbacks +@n_params: The number of parameters that user callbacks take +@param_types: The individual parameter types for user callbacks, note that the effective callback signature is: @return_type callback (@gpointer data1, @@ -225,8 +225,8 @@ is 0. All members filled into the @GSignalQuery structure should be considered constant and have to be left untouched. -@signal_id: The signal id of the signal to query information for -@query: A user provided structure that is filled in with constant +@signal_id: The signal id of the signal to query information for +@query: A user provided structure that is filled in with constant values upon success. @@ -237,12 +237,12 @@ created. Further information about the signals can be aquired through g_signal_query(). -@itype: Instance or interface type -@n_ids: Location to store the number of signal ids for @itype -@Returns: Newly allocated array of signal ids +@itype: Instance or interface type +@n_ids: Location to store the number of signal ids for @itype +@Returns: Newly allocated array of signal ids - + @@ -268,8 +268,9 @@ to be a valid signal handler id, connected to a signal of @instance. -@instance: The instance to block the signal handler of -@handler_id: Handler id of the handler to be blocked +@instance: The instance to block the signal handler of +@handler_id: Handler id of the handler to be blocked + @@ -289,8 +290,8 @@ to be a valid id of a signal handler that is connected to a signal of @instance and is currently blocked. -@instance: The instance to unblock the signal handler of -@handler_id: Handler id of the handler to be unblocked +@instance: The instance to unblock the signal handler of +@handler_id: Handler id of the handler to be unblocked @@ -304,8 +305,8 @@ to be a valid signal handler id, connected to a signal of @instance. -@instance: The instance to remove the signal handler from -@handler_id: Handler id of the handler to be disconnected +@instance: The instance to remove the signal handler from +@handler_id: Handler id of the handler to be disconnected @@ -317,15 +318,15 @@ The match @mask has to be non-0 for successfull matches. If no handler was found, 0 is returned. -@instance: The instance owning the signal handler to be found -@mask: Mask indicating which of @signal_id, @detail, +@instance: The instance owning the signal handler to be found +@mask: Mask indicating which of @signal_id, @detail, @closure, @func and/or @data the handler has to match -@signal_id: Signal the handler has to be connected to -@detail: Signal detail the handler has to be connected to -@closure: The closure the handler will invoke -@func: The C closure callback of the handler (useless for non-C closures) -@data: The closure data of the handler's closure -@Returns: A valid non-0 signal handler id for a successfull match +@signal_id: Signal the handler has to be connected to +@detail: Signal detail the handler has to be connected to +@closure: The closure the handler will invoke +@func: The C closure callback of the handler (useless for non-C closures) +@data: The closure data of the handler's closure +@Returns: A valid non-0 signal handler id for a successfull match @@ -339,15 +340,15 @@ If no handlers were found, 0 is returned, the number of blocked handlers otherwise. -@instance: The instance to block handlers from -@mask: Mask indicating which of @signal_id, @detail, - @closure, @func and/or @data the handlers have to match -@signal_id: Signal the handlers have to be connected to -@detail: Signal detail the handlers have to be connected to -@closure: The closure the handlers will invoke -@func: The C closure callback of the handlers (useless for non-C closures) -@data: The closure data of the handlers' closures -@Returns: The amount of handlers that got blocked +@instance: The instance to block handlers from +@mask: Mask indicating which of @signal_id, @detail, + @closure, @func and/or @data the handlers have to match +@signal_id: Signal the handlers have to be connected to +@detail: Signal detail the handlers have to be connected to +@closure: The closure the handlers will invoke +@func: The C closure callback of the handlers (useless for non-C closures) +@data: The closure data of the handlers' closures +@Returns: The amount of handlers that got blocked @@ -362,15 +363,15 @@ otherwise. The match criteria should not apply to any handlers that are not currently blocked. -@instance: The instance to unblock handlers from -@mask: Mask indicating which of @signal_id, @detail, +@instance: The instance to unblock handlers from +@mask: Mask indicating which of @signal_id, @detail, @closure, @func and/or @data the handlers have to match -@signal_id: Signal the handlers have to be connected to -@detail: Signal detail the handlers have to be connected to -@closure: The closure the handlers will invoke -@func: The C closure callback of the handlers (useless for non-C closures) -@data: The closure data of the handlers' closures -@Returns: The amount of handlers that got unblocked +@signal_id: Signal the handlers have to be connected to +@detail: Signal detail the handlers have to be connected to +@closure: The closure the handlers will invoke +@func: The C closure callback of the handlers (useless for non-C closures) +@data: The closure data of the handlers' closures +@Returns: The amount of handlers that got unblocked @@ -384,15 +385,15 @@ If no handlers were found, 0 is returned, the number of disconnected handlers otherwise. -@instance: The instance to remove handlers from -@mask: Mask indicating which of @signal_id, @detail, - @closure, @func and/or @data the handlers have to match -@signal_id: Signal the handlers have to be connected to -@detail: Signal detail the handlers have to be connected to -@closure: The closure the handlers will invoke -@func: The C closure callback of the handlers (useless for non-C closures) -@data: The closure data of the handlers' closures -@Returns: The amount of handlers that got disconnected +@instance: The instance to remove handlers from +@mask: Mask indicating which of @signal_id, @detail, + @closure, @func and/or @data the handlers have to match +@signal_id: Signal the handlers have to be connected to +@detail: Signal detail the handlers have to be connected to +@closure: The closure the handlers will invoke +@func: The C closure callback of the handlers (useless for non-C closures) +@data: The closure data of the handlers' closures +@Returns: The amount of handlers that got disconnected @@ -446,19 +447,18 @@ otherwise. @hook_id: - + - +Internal function to parse a signal names into its @signal_id +and @detail quark. -@instance: - - - - - - - -@itype: +@detailed_signal: A string of the form "signal-name::detail" +@itype: The interface/instance type taht introduced "signal-name" +@signal_id_p: Location to store the signal id +@detail_p: Location to stroe the detail quark +@force_detail_quark: %TRUE forces creation of a GQuark for the detail +@Returns: Whether the signal name could successfully be parsed and + @signal_id_p and @detail_p contain valid return values. diff --git a/gobject/ChangeLog b/gobject/ChangeLog index 85e21cc50..3ad2312fc 100644 --- a/gobject/ChangeLog +++ b/gobject/ChangeLog @@ -1,3 +1,10 @@ +Fri Nov 3 07:35:00 2000 Tim Janik + + * gsignal.[hc]: prefix internal functions with '_'. renamed + g_signal_connect_closure() to g_signal_connect_closure_by_id(). + added g_signal_parse_name() to retrive signal_id and detail quark + from a signal name (internal). + Wed Nov 1 03:36:54 2000 Tim Janik * gobject.c (g_object_base_class_finalize): destroy all signals that diff --git a/gobject/gclosure.h b/gobject/gclosure.h index 2ca0f3fa3..4720fda0a 100644 --- a/gobject/gclosure.h +++ b/gobject/gclosure.h @@ -145,7 +145,7 @@ void g_closure_invoke (GClosure *closure, gpointer invocation_hint); -/* +/* FIXME: data_object::destroy -> closure_invalidate(); closure_invalidate() -> disconnect(closure); disconnect(closure) -> (unlink) closure_unref(); diff --git a/gobject/gobject.c b/gobject/gobject.c index 5aa99d8bc..7307cbb5f 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -164,7 +164,7 @@ g_object_base_class_finalize (GObjectClass *class) g_message ("finallizing base class of %s", G_OBJECT_CLASS_NAME (class)); - g_signals_destroy (G_OBJECT_CLASS_TYPE (class)); + _g_signals_destroy (G_OBJECT_CLASS_TYPE (class)); for (i = 0; i < class->n_param_specs; i++) { @@ -295,7 +295,7 @@ g_object_do_shutdown (GObject *object) static void g_object_do_finalize (GObject *object) { - g_signal_handlers_destroy (object); + _g_signal_handlers_destroy (object); g_datalist_clear (&object->qdata); #ifdef DEBUG_OBJECTS diff --git a/gobject/gsignal.c b/gobject/gsignal.c index 35fe060a6..051ff8e49 100644 --- a/gobject/gsignal.c +++ b/gobject/gsignal.c @@ -433,7 +433,7 @@ handler_unref_R (guint signal_id, { if (handler->next) handler->next->prev = handler->prev; - if (handler->prev) /* watch out for g_signal_handlers_destroy()! */ + if (handler->prev) /* watch out for _g_signal_handlers_destroy()! */ handler->prev->next = handler->next; else { @@ -568,7 +568,7 @@ g_signal_init (void) /* sync with gtype.c */ } void -g_signals_destroy (GType itype) +_g_signals_destroy (GType itype) { guint i; @@ -630,6 +630,80 @@ g_signal_stop_emission (gpointer instance, G_UNLOCK (g_signal_mutex); } +static inline guint +signal_parse_name (const gchar *name, + GType itype, + GQuark *detail_p, + gboolean force_quark) +{ + const gchar *colon = strchr (name, ':'); + guint signal_id; + + if (!colon) + { + signal_id = signal_id_lookup (g_quark_try_string (name), itype); + if (signal_id && detail_p) + *detail_p = 0; + } + else if (colon[1] == ':') + { + gchar buffer[32]; + guint l = colon - name; + + if (l < 32) + { + memcpy (buffer, name, l); + buffer[l] = 0; + signal_id = signal_id_lookup (g_quark_try_string (buffer), itype); + } + else + { + gchar *signal = g_new (gchar, l + 1); + + memcpy (signal, name, l); + signal[l] = 0; + signal_id = signal_id_lookup (g_quark_try_string (signal), itype); + g_free (signal); + } + + if (signal_id && detail_p) + *detail_p = colon[2] ? (force_quark ? g_quark_from_string : g_quark_try_string) (colon + 2) : 0; + } + else + signal_id = 0; + return signal_id; +} + +gboolean +g_signal_parse_name (const gchar *detailed_signal, + GType itype, + guint *signal_id_p, + GQuark *detail_p, + gboolean force_detail_quark) +{ + GQuark detail = 0; + guint signal_id; + + g_return_val_if_fail (detailed_signal != NULL, FALSE); + g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), FALSE); + + G_LOCK (g_signal_mutex); + signal_id = signal_parse_name (detailed_signal, itype, &detail, force_detail_quark); + G_UNLOCK (g_signal_mutex); + + if (signal_id) + { + if (signal_id_p) + *signal_id_p = signal_id; + if (detail_p) + *detail_p = detail; + + return TRUE; + } + else + return FALSE; +} + guint g_signal_lookup (const gchar *name, GType itype) @@ -871,11 +945,11 @@ signal_destroy_R (SignalNode *signal_node) } guint -g_signal_connect_closure (gpointer instance, - guint signal_id, - GQuark detail, - GClosure *closure, - gboolean after) +g_signal_connect_closure_by_id (gpointer instance, + guint signal_id, + GQuark detail, + GClosure *closure, + gboolean after) { SignalNode *node; guint handler_id = 0; @@ -982,7 +1056,7 @@ g_signal_handler_disconnect (gpointer instance, } void -g_signal_handlers_destroy (gpointer instance) +_g_signal_handlers_destroy (gpointer instance) { GBSearchArray *hlbsa; diff --git a/gobject/gsignal.h b/gobject/gsignal.h index 92e5a4814..7c2caa049 100644 --- a/gobject/gsignal.h +++ b/gobject/gsignal.h @@ -122,7 +122,7 @@ gboolean g_signal_has_handler_pending (gpointer instance, guint signal_id, GQuark detail, gboolean may_be_blocked); -guint g_signal_connect_closure (gpointer instance, +guint g_signal_connect_closure_by_id (gpointer instance, guint signal_id, GQuark detail, GClosure *closure, @@ -164,8 +164,13 @@ guint g_signal_handlers_disconnect_matched (gpointer instance, /*< private >*/ -void g_signal_handlers_destroy (gpointer instance); -void g_signals_destroy (GType itype); +gboolean g_signal_parse_name (const gchar *detailed_signal, + GType itype, + guint *signal_id_p, + GQuark *detail_p, + gboolean force_detail_quark); +void _g_signal_handlers_destroy (gpointer instance); +void _g_signals_destroy (GType itype); #ifdef __cplusplus