+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
+Thu Jun 28 16:57:44 2001 Tim Janik <timj@gtk.org>
+
+ * configure.in (GLIB_MICRO_VERSION): up version number to 1.3.7,
+ interface age 0, binary age 0.
+
2001-06-27 Kjartan Maraas <kmaraas@gnome.org>
* glib/gmarkup.c: Fix a typo.
#
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
Portable way to copy <type>va_list</type> variables.
</para>
+<!-- # Unused Parameters # -->
@ap1: the <type>va_list</type> variable to place a copy of @ap2 in.
@ap2: a <type>va_list</type>.
-<!-- ##### FUNCTION g_signal_newc ##### -->
+<!-- ##### MACRO g_signal_newc ##### -->
<para>
</para>
+@Returns:
+<!-- # Unused Parameters # -->
@signal_name:
@itype:
@signal_flags:
@return_type:
@n_params:
@Varargs:
-@Returns:
<!-- ##### FUNCTION g_signal_newv ##### -->
@c_handler:
@data:
@destroy_data:
+@connect_flags:
+@Returns:
+<!-- # Unused Parameters # -->
@swapped:
@after:
-@Returns:
<!-- ##### FUNCTION g_signal_connect_object ##### -->
@detailed_signal:
@c_handler:
@gobject:
+@connect_flags:
+@Returns:
+<!-- # Unused Parameters # -->
@swapped:
@after:
-@Returns:
<!-- ##### FUNCTION g_signal_connect_closure ##### -->
+Thu Jun 28 16:42:49 2001 Tim Janik <timj@gtk.org>
+
+ * 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 <hans@breuer.org>
* gobject.def : updated externals
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;
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);
}
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);
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 {
#include <gobject/gvalue.h>
#include <gobject/gparam.h>
#include <gobject/gclosure.h>
+#include <gobject/gsignal.h>
G_BEGIN_DECLS
const gchar *detailed_signal,
GCallback c_handler,
gpointer gobject,
- gboolean swapped,
- gboolean after);
+ GConnectFlags connect_flags);
/* --- implementation macros --- */
}
GList*
-g_param_spec_pool_belongings (GParamSpecPool *pool,
+g_param_spec_pool_list_owned (GParamSpecPool *pool,
GType owner_type)
{
gpointer data[2];
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,
* 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
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)
{
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,
}
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;
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);
gpointer data);
-/* --- run & match types --- */
+/* --- run, match and connect types --- */
typedef enum
{
G_SIGNAL_RUN_FIRST = 1 << 0,
#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,
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,
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,
/* --- 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);