diff options
author | Tim Janik <timj@gtk.org> | 2000-11-03 08:18:09 +0000 |
---|---|---|
committer | Tim Janik <timj@src.gnome.org> | 2000-11-03 08:18:09 +0000 |
commit | 3cc60a9ab1df2dcf393a15b8a66e0602817646bd (patch) | |
tree | 9c70c0f916dc705010afc94032f75d9abe0cfdff /gobject/gsignal.c | |
parent | e78311ff4e162e5a73d9816fa72bbc50f25db4cc (diff) | |
download | glib-3cc60a9ab1df2dcf393a15b8a66e0602817646bd.tar.gz |
prefix internal functions with '_'. renamed g_signal_connect_closure() to
Fri Nov 3 07:35:00 2000 Tim Janik <timj@gtk.org>
* 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 <timj@gtk.org>
* 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.
Diffstat (limited to 'gobject/gsignal.c')
-rw-r--r-- | gobject/gsignal.c | 90 |
1 files changed, 82 insertions, 8 deletions
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; |