[gnome-builder] egg-signal-group: Add connect_data() variant



commit 1f078d8d12702fab92146d41a60729ff2bcb5266
Author: Garrett Regier <garrettregier gmail com>
Date:   Tue May 12 20:39:16 2015 -0700

    egg-signal-group: Add connect_data() variant
    
    This is generally useful and required for bindings.

 contrib/egg/egg-signal-group.c |   59 +++++++++++++++++++++++++++++++++-------
 contrib/egg/egg-signal-group.h |    6 ++++
 2 files changed, 55 insertions(+), 10 deletions(-)
---
diff --git a/contrib/egg/egg-signal-group.c b/contrib/egg/egg-signal-group.c
index 268805e..77f377b 100644
--- a/contrib/egg/egg-signal-group.c
+++ b/contrib/egg/egg-signal-group.c
@@ -500,12 +500,14 @@ egg_signal_group_new (GType target_type)
                        NULL);
 }
 
-void
-egg_signal_group_connect_object (EggSignalGroup *self,
-                                 const gchar    *detailed_signal,
-                                 GCallback       callback,
-                                 gpointer        object,
-                                 GConnectFlags   flags)
+static void
+egg_signal_group_connect (EggSignalGroup *self,
+                          const gchar    *detailed_signal,
+                          GCallback       callback,
+                          gpointer        data,
+                          GClosureNotify  notify,
+                          GConnectFlags   flags,
+                          gboolean        is_object)
 {
   SignalHandler *handler;
   GClosure *closure;
@@ -515,12 +517,24 @@ egg_signal_group_connect_object (EggSignalGroup *self,
   g_return_if_fail (g_signal_parse_name (detailed_signal, self->target_type,
                                          NULL, NULL, FALSE) != 0);
   g_return_if_fail (callback != NULL);
-  g_return_if_fail (G_IS_OBJECT (object));
 
-  if ((flags & G_CONNECT_SWAPPED) != 0)
-    closure = g_cclosure_new_object_swap (callback, object);
+  if (!is_object)
+    {
+      if ((flags & G_CONNECT_SWAPPED) != 0)
+        closure = g_cclosure_new_swap (callback, data, notify);
+      else
+        closure = g_cclosure_new (callback, data, notify);
+    }
   else
-    closure = g_cclosure_new_object (callback, object);
+    {
+      g_assert (data != NULL);
+      g_assert (notify == NULL);
+
+      if ((flags & G_CONNECT_SWAPPED) != 0)
+        closure = g_cclosure_new_object_swap (callback, data);
+      else
+        closure = g_cclosure_new_object (callback, data);
+    }
 
   handler = g_slice_new0 (SignalHandler);
   handler->detailed_signal = g_intern_string (detailed_signal);
@@ -534,3 +548,28 @@ egg_signal_group_connect_object (EggSignalGroup *self,
   if (self->target != NULL)
     egg_signal_group_bind_handler (self, handler);
 }
+
+void
+egg_signal_group_connect_object (EggSignalGroup *self,
+                                 const gchar    *detailed_signal,
+                                 GCallback       callback,
+                                 gpointer        object,
+                                 GConnectFlags   flags)
+{
+  g_return_if_fail (G_IS_OBJECT (object));
+
+  return egg_signal_group_connect (self, detailed_signal, callback,
+                                   object, NULL, flags, TRUE);
+}
+
+void
+egg_signal_group_connect_data (EggSignalGroup *self,
+                               const gchar    *detailed_signal,
+                               GCallback       callback,
+                               gpointer        data,
+                               GClosureNotify  notify,
+                               GConnectFlags   flags)
+{
+  return egg_signal_group_connect (self, detailed_signal, callback,
+                                   data, notify, flags, FALSE);
+}
diff --git a/contrib/egg/egg-signal-group.h b/contrib/egg/egg-signal-group.h
index 607b8ad..422c52e 100644
--- a/contrib/egg/egg-signal-group.h
+++ b/contrib/egg/egg-signal-group.h
@@ -33,6 +33,12 @@ void            egg_signal_group_connect_object (EggSignalGroup *self,
                                                  GCallback       c_handler,
                                                  gpointer        object,
                                                  GConnectFlags   flags);
+void            egg_signal_group_connect_data   (EggSignalGroup *self,
+                                                 const gchar    *detailed_signal,
+                                                 GCallback       c_handler,
+                                                 gpointer        data,
+                                                 GClosureNotify  notify,
+                                                 GConnectFlags   flags);
 void            egg_signal_group_set_target     (EggSignalGroup *self,
                                                  gpointer        target);
 gpointer        egg_signal_group_get_target     (EggSignalGroup *self);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]