[gnome-builder] egg-signal-group: Add connect_data() variant
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] egg-signal-group: Add connect_data() variant
- Date: Wed, 13 May 2015 17:28:07 +0000 (UTC)
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]