From fd860cb987e0bc77b8a69363576c01069b40244e Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Thu, 28 Jun 2001 17:05:12 +0000 Subject: [PATCH] up version number to 1.3.7, interface age 0, binary age 0. Thu Jun 28 16:57:44 2001 Tim Janik * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, interface age 0, binary age 0. Thu Jun 28 16:42:49 2001 Tim Janik * gsignal.c (g_signal_lookup): (g_signal_list_ids): give elaborate warnings about invalid types, non-instantiatable types and unloaded types that we can't operate on. * gparam.[hc]: g_param_spec_pool_belongings() -> g_param_spec_pool_list_owned(). * gsignal.[hc]: renamed: g_signal_newc -> g_signal_new g_signal_disconnect_by_func -> g_signal_handlers_disconnect_by_func g_signal_block_by_func -> g_signal_handlers_block_by_func g_signal_unblock_by_func -> g_signal_handlers_unblock_by_func added GConnectType to simplify (..gboolean swapped, gboolean after) args. * gobject.[hc]: changed prototypes accordingly. --- ChangeLog | 5 ++ ChangeLog.pre-2-0 | 5 ++ ChangeLog.pre-2-10 | 5 ++ ChangeLog.pre-2-12 | 5 ++ ChangeLog.pre-2-2 | 5 ++ ChangeLog.pre-2-4 | 5 ++ ChangeLog.pre-2-6 | 5 ++ ChangeLog.pre-2-8 | 5 ++ configure.in | 2 +- docs/reference/glib/tmpl/macros_misc.sgml | 1 + docs/reference/gobject/tmpl/signals.sgml | 13 ++- gobject/ChangeLog | 19 +++++ gobject/gobject.c | 27 +++---- gobject/gobject.h | 4 +- gobject/gparam.c | 2 +- gobject/gparam.h | 6 +- gobject/gsignal.c | 126 ++++++++++++++++++------------ gobject/gsignal.h | 36 ++++++--- 18 files changed, 189 insertions(+), 87 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a96427..f299664 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 5a96427..f299664 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Thu Jun 28 16:57:44 2001 Tim Janik + + * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7, + interface age 0, binary age 0. + 2001-06-27 Kjartan Maraas * glib/gmarkup.c: Fix a typo. diff --git a/configure.in b/configure.in index d064e98..260d5ee 100644 --- a/configure.in +++ b/configure.in @@ -31,7 +31,7 @@ GLIB_AC_DIVERT_BEFORE_HELP([ # GLIB_MAJOR_VERSION=1 GLIB_MINOR_VERSION=3 -GLIB_MICRO_VERSION=6 +GLIB_MICRO_VERSION=7 GLIB_INTERFACE_AGE=0 GLIB_BINARY_AGE=0 GLIB_VERSION=$GLIB_MAJOR_VERSION.$GLIB_MINOR_VERSION.$GLIB_MICRO_VERSION diff --git a/docs/reference/glib/tmpl/macros_misc.sgml b/docs/reference/glib/tmpl/macros_misc.sgml index 7b93d0a..cd71ee7 100644 --- a/docs/reference/glib/tmpl/macros_misc.sgml +++ b/docs/reference/glib/tmpl/macros_misc.sgml @@ -71,6 +71,7 @@ arrays or arrays on the stack. Portable way to copy va_list variables. + @ap1: the va_list variable to place a copy of @ap2 in. @ap2: a va_list. diff --git a/docs/reference/gobject/tmpl/signals.sgml b/docs/reference/gobject/tmpl/signals.sgml index 6d3f02f..be5843e 100644 --- a/docs/reference/gobject/tmpl/signals.sgml +++ b/docs/reference/gobject/tmpl/signals.sgml @@ -207,11 +207,13 @@ filled in by the g_signal_query() function. - + +@Returns: + @signal_name: @itype: @signal_flags: @@ -222,7 +224,6 @@ filled in by the g_signal_query() function. @return_type: @n_params: @Varargs: -@Returns: @@ -360,9 +361,11 @@ g_signal_query(). @c_handler: @data: @destroy_data: +@connect_flags: +@Returns: + @swapped: @after: -@Returns: @@ -374,9 +377,11 @@ g_signal_query(). @detailed_signal: @c_handler: @gobject: +@connect_flags: +@Returns: + @swapped: @after: -@Returns: diff --git a/gobject/ChangeLog b/gobject/ChangeLog index ac4c7bd..64f1c79 100644 --- a/gobject/ChangeLog +++ b/gobject/ChangeLog @@ -1,3 +1,22 @@ +Thu Jun 28 16:42:49 2001 Tim Janik + + * gsignal.c (g_signal_lookup): + (g_signal_list_ids): give elaborate warnings about invalid types, + non-instantiatable types and unloaded types that we can't operate on. + + * gparam.[hc]: g_param_spec_pool_belongings() -> + g_param_spec_pool_list_owned(). + + * gsignal.[hc]: renamed: + g_signal_newc -> g_signal_new + g_signal_disconnect_by_func -> g_signal_handlers_disconnect_by_func + g_signal_block_by_func -> g_signal_handlers_block_by_func + g_signal_unblock_by_func -> g_signal_handlers_unblock_by_func + added GConnectType to simplify (..gboolean swapped, gboolean after) + args. + + * gobject.[hc]: changed prototypes accordingly. + 2001-06-22 Hans Breuer * gobject.def : updated externals diff --git a/gobject/gobject.c b/gobject/gobject.c index 0cb27a0..e3c9136 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -212,7 +212,7 @@ g_object_base_class_finalize (GObjectClass *class) g_slist_free (class->construct_properties); class->construct_properties = NULL; - list = g_param_spec_pool_belongings (pspec_pool, G_OBJECT_CLASS_TYPE (class)); + list = g_param_spec_pool_list_owned (pspec_pool, G_OBJECT_CLASS_TYPE (class)); for (node = list; node; node = node->next) { GParamSpec *pspec = node->data; @@ -1073,19 +1073,19 @@ g_object_connect (gpointer _object, if (strncmp (signal_spec, "signal::", 8) == 0) sid = g_signal_connect_data (object, signal_spec + 8, callback, data, NULL, - FALSE, FALSE); + 0); else if (strncmp (signal_spec, "swapped_signal::", 16) == 0) sid = g_signal_connect_data (object, signal_spec + 16, callback, data, NULL, - TRUE, FALSE); + G_CONNECT_SWAPPED); else if (strncmp (signal_spec, "signal_after::", 14) == 0) sid = g_signal_connect_data (object, signal_spec + 14, callback, data, NULL, - FALSE, TRUE); + G_CONNECT_AFTER); else if (strncmp (signal_spec, "swapped_signal_after::", 22) == 0) sid = g_signal_connect_data (object, signal_spec + 22, callback, data, NULL, - TRUE, TRUE); + G_CONNECT_SWAPPED | G_CONNECT_AFTER); else { g_warning ("%s: invalid signal spec \"%s\"", G_STRLOC, signal_spec); @@ -1408,12 +1408,11 @@ g_value_dup_object (const GValue *value) } guint -g_signal_connect_object (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer gobject, - gboolean swapped, - gboolean after) +g_signal_connect_object (gpointer instance, + const gchar *detailed_signal, + GCallback c_handler, + gpointer gobject, + GConnectFlags connect_flags) { g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0); g_return_val_if_fail (detailed_signal != NULL, 0); @@ -1425,12 +1424,12 @@ g_signal_connect_object (gpointer instance, g_return_val_if_fail (G_IS_OBJECT (gobject), 0); - closure = (swapped ? g_cclosure_new_object_swap : g_cclosure_new_object) (c_handler, gobject); + closure = ((connect_flags & G_CONNECT_SWAPPED) ? g_cclosure_new_object_swap : g_cclosure_new_object) (c_handler, gobject); - return g_signal_connect_closure (instance, detailed_signal, closure, after); + return g_signal_connect_closure (instance, detailed_signal, closure, connect_flags & G_CONNECT_AFTER); } else - return g_signal_connect_data (instance, detailed_signal, c_handler, NULL, NULL, swapped, after); + return g_signal_connect_data (instance, detailed_signal, c_handler, NULL, NULL, connect_flags); } typedef struct { diff --git a/gobject/gobject.h b/gobject/gobject.h index d46d5ce..8191904 100644 --- a/gobject/gobject.h +++ b/gobject/gobject.h @@ -23,6 +23,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -184,8 +185,7 @@ guint g_signal_connect_object (gpointer instance, const gchar *detailed_signal, GCallback c_handler, gpointer gobject, - gboolean swapped, - gboolean after); + GConnectFlags connect_flags); /* --- implementation macros --- */ diff --git a/gobject/gparam.c b/gobject/gparam.c index 4fbf455..0493b95 100644 --- a/gobject/gparam.c +++ b/gobject/gparam.c @@ -726,7 +726,7 @@ pool_list (gpointer key, } GList* -g_param_spec_pool_belongings (GParamSpecPool *pool, +g_param_spec_pool_list_owned (GParamSpecPool *pool, GType owner_type) { gpointer data[2]; diff --git a/gobject/gparam.h b/gobject/gparam.h index 7def6d2..33f8ae2 100644 --- a/gobject/gparam.h +++ b/gobject/gparam.h @@ -172,7 +172,7 @@ GParamSpec* g_param_spec_pool_lookup (GParamSpecPool *pool, const gchar *param_name, GType owner_type, gboolean walk_ancestors); -GList* g_param_spec_pool_belongings (GParamSpecPool *pool, +GList* g_param_spec_pool_list_owned (GParamSpecPool *pool, GType owner_type); GParamSpec** g_param_spec_pool_list (GParamSpecPool *pool, GType owner_type, @@ -192,8 +192,8 @@ GParamSpec** g_param_spec_pool_list (GParamSpecPool *pool, * gint values_cmp (GParamSpec *pspec, * const GValue *value1, * const GValue *value2): - * return value1 - value2, i.e. <0 if value1 < value2, - * >0 if value1 > value2, and 0 otherwise (they are equal) + * return value1 - value2, i.e. (-1) if value1 < value2, + * (+1) if value1 > value2, and (0) otherwise (equality) */ G_END_DECLS diff --git a/gobject/gsignal.c b/gobject/gsignal.c index 203beb7..4927abf 100644 --- a/gobject/gsignal.c +++ b/gobject/gsignal.c @@ -943,10 +943,70 @@ g_signal_lookup (const gchar *name, SIGNAL_LOCK (); signal_id = signal_id_lookup (g_quark_try_string (name), itype); SIGNAL_UNLOCK (); + if (!signal_id) + { + /* give elaborate warnings */ + if (!g_type_name (itype)) + g_warning (G_STRLOC ": unable to lookup signal \"%s\" for invalid type id `%u'", + name, itype); + else if (!G_TYPE_IS_INSTANTIATABLE (itype)) + g_warning (G_STRLOC ": unable to lookup signal \"%s\" for non instantiatable type `%s'", + name, g_type_name (itype)); + else if (!g_type_class_peek (itype)) + g_warning (G_STRLOC ": unable to lookup signal \"%s\" of unloaded type `%s'", + name, g_type_name (itype)); + } return signal_id; } +guint* +g_signal_list_ids (GType itype, + guint *n_ids) +{ + SignalKey *keys; + GArray *result; + guint n_nodes; + guint i; + + g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), NULL); + g_return_val_if_fail (n_ids != NULL, NULL); + + SIGNAL_LOCK (); + keys = g_signal_key_bsa.nodes; + n_nodes = g_signal_key_bsa.n_nodes; + result = g_array_new (FALSE, FALSE, sizeof (guint)); + + for (i = 0; i < n_nodes; i++) + if (keys[i].itype == itype) + { + const gchar *name = g_quark_to_string (keys[i].quark); + + /* Signal names with "_" in them are aliases to the same + * name with "-" instead of "_". + */ + if (!strchr (name, '_')) + g_array_append_val (result, keys[i].signal_id); + } + *n_ids = result->len; + SIGNAL_UNLOCK (); + if (!n_nodes) + { + /* give elaborate warnings */ + if (!g_type_name (itype)) + g_warning (G_STRLOC ": unable to list signals for invalid type id `%u'", + itype); + else if (!G_TYPE_IS_INSTANTIATABLE (itype)) + g_warning (G_STRLOC ": unable to list signals of non instantiatable type `%s'", + g_type_name (itype)); + else if (!g_type_class_peek (itype)) + g_warning (G_STRLOC ": unable to list signals of unloaded type `%s'", + g_type_name (itype)); + } + + return (guint*) g_array_free (result, FALSE); +} + G_CONST_RETURN gchar* g_signal_name (guint signal_id) { @@ -986,43 +1046,6 @@ g_signal_query (guint signal_id, SIGNAL_UNLOCK (); } -guint* -g_signal_list_ids (GType itype, - guint *n_ids) -{ - SignalKey *keys; - GArray *result; - guint n_nodes; - guint i; - - g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), NULL); - g_return_val_if_fail (n_ids != NULL, NULL); - - SIGNAL_LOCK (); - - keys = g_signal_key_bsa.nodes; - n_nodes = g_signal_key_bsa.n_nodes; - result = g_array_new (FALSE, FALSE, sizeof (guint)); - - for (i = 0; i < n_nodes; i++) - if (keys[i].itype == itype) - { - const gchar *name = g_quark_to_string (keys[i].quark); - - /* Signal names with "_" in them are aliases to the same - * name with "-" instead of "_". - */ - if (!strchr (name, '_')) - g_array_append_val (result, keys[i].signal_id); - } - - *n_ids = result->len; - - SIGNAL_UNLOCK (); - - return (guint*) g_array_free (result, FALSE); -} - guint g_signal_new_valist (const gchar *signal_name, GType itype, @@ -1058,16 +1081,16 @@ g_signal_new_valist (const gchar *signal_name, } guint -g_signal_newc (const gchar *signal_name, - GType itype, - GSignalFlags signal_flags, - guint class_offset, - GSignalAccumulator accumulator, - gpointer accu_data, - GSignalCMarshaller c_marshaller, - GType return_type, - guint n_params, - ...) +g_signal_new (const gchar *signal_name, + GType itype, + GSignalFlags signal_flags, + guint class_offset, + GSignalAccumulator accumulator, + gpointer accu_data, + GSignalCMarshaller c_marshaller, + GType return_type, + guint n_params, + ...) { va_list args; guint signal_id; @@ -1350,18 +1373,21 @@ g_signal_connect_data (gpointer instance, GCallback c_handler, gpointer data, GClosureNotify destroy_data, - gboolean swapped, - gboolean after) + GConnectFlags connect_flags) { guint signal_id; gulong handler_seq_no = 0; GQuark detail = 0; GType itype; - + gboolean swapped, after; + g_return_val_if_fail (G_TYPE_CHECK_INSTANCE (instance), 0); g_return_val_if_fail (detailed_signal != NULL, 0); g_return_val_if_fail (c_handler != NULL, 0); + swapped = (connect_flags & G_CONNECT_SWAPPED) != FALSE; + after = (connect_flags & G_CONNECT_AFTER) != FALSE; + SIGNAL_LOCK (); itype = G_TYPE_FROM_INSTANCE (instance); signal_id = signal_parse_name (detailed_signal, itype, &detail, TRUE); diff --git a/gobject/gsignal.h b/gobject/gsignal.h index 2ba7a0b..8824eb4 100644 --- a/gobject/gsignal.h +++ b/gobject/gsignal.h @@ -41,7 +41,7 @@ typedef gboolean (*GSignalAccumulator) (GSignalInvocationHint *ihint, gpointer data); -/* --- run & match types --- */ +/* --- run, match and connect types --- */ typedef enum { G_SIGNAL_RUN_FIRST = 1 << 0, @@ -55,6 +55,11 @@ typedef enum #define G_SIGNAL_FLAGS_MASK 0x7f typedef enum { + G_CONNECT_AFTER = 1 << 0, + G_CONNECT_SWAPPED = 1 << 1 +} GConnectFlags; +typedef enum +{ G_SIGNAL_MATCH_ID = 1 << 0, G_SIGNAL_MATCH_DETAIL = 1 << 1, G_SIGNAL_MATCH_CLOSURE = 1 << 2, @@ -106,7 +111,7 @@ guint g_signal_new_valist (const gchar *signal_name, GType return_type, guint n_params, va_list args); -guint g_signal_newc (const gchar *signal_name, +guint g_signal_new (const gchar *signal_name, GType itype, GSignalFlags signal_flags, guint class_offset, @@ -179,8 +184,7 @@ gulong g_signal_connect_data (gpointer instance, GCallback c_handler, gpointer data, GClosureNotify destroy_data, - gboolean swapped, - gboolean after); + GConnectFlags connect_flags); void g_signal_handler_block (gpointer instance, gulong handler_id); void g_signal_handler_unblock (gpointer instance, @@ -220,22 +224,30 @@ guint g_signal_handlers_disconnect_matched (gpointer instance, /* --- convenience --- */ -#define g_signal_connectc(instance, detailed_signal, c_handler, data, swapped) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (swapped), FALSE) #define g_signal_connect(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, FALSE, FALSE) + g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, 0) #define g_signal_connect_swapped(instance, detailed_signal, c_handler, data) \ - g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, TRUE, FALSE) -#define g_signal_disconnect_by_func(instance, func, data) \ + g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, G_CONNECT_SWAPPED) +#define g_signal_handlers_disconnect_by_func(instance, func, data) \ g_signal_handlers_disconnect_matched ((instance), G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, \ 0, 0, NULL, (func), (data)) -#define g_signal_block_by_func(instance, func, data) \ +#define g_signal_handlers_block_by_func(instance, func, data) \ g_signal_handlers_block_matched ((instance), G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, \ 0, 0, NULL, (func), (data)) -#define g_signal_unblock_by_func(instance, func, data) \ +#define g_signal_handlers_unblock_by_func(instance, func, data) \ g_signal_handlers_unblock_matched ((instance), G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, \ 0, 0, NULL, (func), (data)) - + +#ifndef G_DISABLE_COMPAT +/* tmp compat, to be nuked soon */ +#define g_signal_connectc(instance, detailed_signal, c_handler, data, swapped) \ + g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (swapped)?G_CONNECT_SWAPPED:0); +#define g_signal_newc g_signal_new +#define g_signal_disconnect_by_func g_signal_handlers_disconnect_by_func +#define g_signal_block_by_func g_signal_handlers_block_by_func +#define g_signal_unblock_by_func g_signal_handlers_unblock_by_func +#endif + /*< private >*/ void g_signal_handlers_destroy (gpointer instance); void _g_signals_destroy (GType itype); -- 2.7.4