Add g_type_signals() - a function to list all signals for a given type.
authorOwen Taylor <otaylor@redhat.com>
Sun, 29 Oct 2000 07:02:48 +0000 (07:02 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Sun, 29 Oct 2000 07:02:48 +0000 (07:02 +0000)
Sun Oct 29 01:58:44 2000  Owen Taylor  <otaylor@redhat.com>

* gsignal.h: Add g_type_signals() - a function to list
all signals for a given type.

gobject/ChangeLog
gobject/gsignal.c
gobject/gsignal.h

index 511bcc0..4a01755 100644 (file)
@@ -1,3 +1,8 @@
+Sun Oct 29 01:58:44 2000  Owen Taylor  <otaylor@redhat.com>
+
+       * gsignal.h: Add g_type_signals() - a function to list
+       all signals for a given type.
+
 Sat Oct 28 00:28:09 2000  Tim Janik  <timj@gtk.org>
 
        * gclosure.c (g_closure_add_marshal_guards): fixed notifier position
index 0c4f117..1a32234 100644 (file)
@@ -690,6 +690,42 @@ g_signal_query (guint         signal_id,
   G_UNLOCK (g_signal_mutex);
 }
 
+/**
+ * gtk_signals_list:
+ * @itype: an  
+ * @n_ids: location to store number of ids in @itype
+ * 
+ * List all signals for a given type.
+ *
+ * Return value: Array 
+ **/
+guint *
+g_type_signals (GType    itype,
+               guint   *n_ids)
+{
+  guint i;
+  SignalKey *keys;
+  guint n_nodes;
+  GArray *result;
+
+  g_return_val_if_fail (n_ids != NULL, NULL);
+  g_return_val_if_fail (G_TYPE_IS_INSTANTIATABLE (itype) || G_TYPE_IS_INTERFACE (itype), NULL);
+
+  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)
+       g_array_append_val (result, keys[i].signal_id);
+    }
+
+  *n_ids = result->len;
+
+  return (guint *) g_array_free (result, FALSE);
+}
+
 guint
 g_signal_newv (const gchar       *signal_name,
                GType              itype,
index bc2f75c..600b93d 100644 (file)
@@ -105,6 +105,8 @@ gchar*      g_signal_name                   (guint                   signal_id);
 void   g_signal_query                  (guint                   signal_id,
                                         GSignalQuery           *query);
 
+guint * g_type_signals                  (GType                   itype,
+                                        guint                  *n_ids);
 
 /* --- signal handlers --- */
 guint   g_signal_connect_closure       (gpointer                instance,