[Telepathy-commits] [telepathy-mission-control/master] Allow callbacks to be registered on generic pointers
Alberto Mardegan
alberto.mardegan at nokia.com
Tue Feb 17 08:20:58 PST 2009
Allow the callback to be "emitted" by any kind of pointers, not only GObject. A
GObject is still needed to hold the quark data, but the callback can be invoked
with another base pointer.
---
src/mcd-misc.c | 19 ++++++++++++++-----
src/mcd-misc.h | 5 ++++-
2 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/mcd-misc.c b/src/mcd-misc.c
index 06b8449..38bfdc9 100644
--- a/src/mcd-misc.c
+++ b/src/mcd-misc.c
@@ -188,7 +188,7 @@ typedef struct
typedef struct
{
- gpointer object;
+ gpointer strukt;
GSList *callbacks;
} McdReadyData;
@@ -201,7 +201,7 @@ mcd_object_invoke_ready_callbacks (McdReadyData *rd, const GError *error)
{
McdReadyCbData *cb = list->data;
- cb->callback (rd->object, error, cb->user_data);
+ cb->callback (rd->strukt, error, cb->user_data);
g_slice_free (McdReadyCbData, cb);
}
g_slist_free (rd->callbacks);
@@ -210,7 +210,7 @@ mcd_object_invoke_ready_callbacks (McdReadyData *rd, const GError *error)
static void
mcd_ready_data_free (McdReadyData *rd)
{
- if (rd->object)
+ if (rd->strukt)
{
GError error = { TP_ERRORS, TP_ERROR_CANCELLED, "Object disposed" };
mcd_object_invoke_ready_callbacks (rd, &error);
@@ -222,6 +222,15 @@ void
mcd_object_call_when_ready (gpointer object, GQuark quark, McdReadyCb callback,
gpointer user_data)
{
+ mcd_object_call_on_struct_when_ready (object, object, quark, callback,
+ user_data);
+}
+
+void
+mcd_object_call_on_struct_when_ready (gpointer object, gpointer strukt,
+ GQuark quark, McdReadyCb callback,
+ gpointer user_data)
+{
McdReadyData *rd;
McdReadyCbData *cb;
@@ -237,7 +246,7 @@ mcd_object_call_when_ready (gpointer object, GQuark quark, McdReadyCb callback,
if (!rd)
{
rd = g_slice_new (McdReadyData);
- rd->object = object;
+ rd->strukt = strukt;
rd->callbacks = NULL;
g_object_set_qdata_full ((GObject *)object, quark, rd,
(GDestroyNotify)mcd_ready_data_free);
@@ -254,7 +263,7 @@ mcd_object_ready (gpointer object, GQuark quark, const GError *error)
if (!rd) return;
mcd_object_invoke_ready_callbacks (rd, error);
- rd->object = NULL; /* so the callbacks won't be invoked again */
+ rd->strukt = NULL; /* so the callbacks won't be invoked again */
g_object_set_qdata ((GObject *)object, quark, NULL);
}
diff --git a/src/mcd-misc.h b/src/mcd-misc.h
index 30d2604..f1336d2 100644
--- a/src/mcd-misc.h
+++ b/src/mcd-misc.h
@@ -52,10 +52,13 @@ const gchar *_mcd_get_error_string (const GError *error);
#define TP_ARRAY_TYPE_CHANNEL_CLASS_LIST (type_dbus_aasv ())
GType type_dbus_aasv (void);
-typedef void (*McdReadyCb) (gpointer *object, const GError *error,
+typedef void (*McdReadyCb) (gpointer object, const GError *error,
gpointer user_data);
void mcd_object_call_when_ready (gpointer object, GQuark quark,
McdReadyCb callback, gpointer user_data);
+void mcd_object_call_on_struct_when_ready (gpointer object, gpointer strukt,
+ GQuark quark, McdReadyCb callback,
+ gpointer user_data);
void mcd_object_ready (gpointer object, GQuark quark, const GError *error);
G_END_DECLS
--
1.5.6.5
More information about the telepathy-commits
mailing list