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.
This commit is contained in:
Tim Janik
2000-11-03 08:18:09 +00:00
committed by Tim Janik
parent e78311ff4e
commit 3cc60a9ab1
16 changed files with 498 additions and 104 deletions

View File

@@ -1,3 +1,10 @@
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).
Wed Nov 1 03:36:54 2000 Tim Janik <timj@gtk.org>
* gobject.c (g_object_base_class_finalize): destroy all signals that

View File

@@ -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();

View File

@@ -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

View File

@@ -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;

View File

@@ -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