Enlightenment CVS committal

Author  : rephorm
Project : e17
Module  : proto

Dir     : e17/proto/e_dbus/src/lib/dbus


Modified Files:
        E_DBus.h e_dbus_message.c e_dbus_util.c 


Log Message:
refactor method call return callback into e_dbus

===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/dbus/E_DBus.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- E_DBus.h    11 Jul 2007 00:46:37 -0000      1.9
+++ E_DBus.h    11 Jul 2007 00:47:11 -0000      1.10
@@ -112,17 +112,21 @@
  * @param event_data a struct containing the return data.
  */
 typedef void (*E_DBus_Callback_Func) (void *user_data, void *method_return, 
DBusError *error);
+typedef DBusMessage *(*E_DBus_Unmarshal_Func) (DBusMessage *msg);
 
 typedef struct E_DBus_Callback E_DBus_Callback;
 struct E_DBus_Callback
 {
-  E_DBus_Callback_Func func;
+  E_DBus_Callback_Func cb_func;
+  E_DBus_Unmarshal_Func unmarshal_func;
   void *user_data;
 };
 
-E_DBus_Callback *e_dbus_callback_new(E_DBus_Callback_Func cb_func, void 
*user_data);
+E_DBus_Callback *e_dbus_callback_new(E_DBus_Callback_Func cb_func, 
E_DBus_Unmarshal_Func unmarshal_func, void *user_data);
+
 void e_dbus_callback_free(E_DBus_Callback *callback);
 void e_dbus_callback_call(E_DBus_Callback *cb, void *data, DBusError *error);
+void *e_dbus_callback_unmarshal(E_DBus_Callback *cb, DBusMessage *msg);
 
 const char *e_dbus_basic_type_as_string(int type);
 
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/dbus/e_dbus_message.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_dbus_message.c    22 Mar 2007 01:44:12 -0000      1.3
+++ e_dbus_message.c    11 Jul 2007 00:47:11 -0000      1.4
@@ -83,3 +83,24 @@
 
   return pending;
 }
+
+static void
+cb_method_call(void *data, DBusMessage *msg, DBusError *err)
+{
+  E_DBus_Callback *cb = data;
+  void *method_return = NULL;
+  if (!cb) return;
+
+  if (!dbus_error_is_set(err))
+    method_return = e_dbus_callback_unmarshal(cb, msg);
+
+  e_dbus_callback_call(cb, method_return, err);
+}
+
+DBusPendingCall *
+e_dbus_method_call_send(E_DBus_Connection *conn, DBusMessage *msg, 
E_DBus_Unmarshal_Func unmarshal_func, E_DBus_Callback_Func cb_func, int 
timeout, void *data)
+{
+  E_DBus_Callback *cb;
+  cb = e_dbus_callback_new(cb_func, unmarshal_func, data);
+  return e_dbus_message_send(conn, msg, cb_method_call, timeout, cb);
+}
===================================================================
RCS file: /cvs/e/e17/proto/e_dbus/src/lib/dbus/e_dbus_util.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_dbus_util.c       11 Jul 2007 00:46:37 -0000      1.3
+++ e_dbus_util.c       11 Jul 2007 00:47:11 -0000      1.4
@@ -7,7 +7,7 @@
  * @param user_data data to pass to the callback
  */
 E_DBus_Callback *
-e_dbus_callback_new(E_DBus_Callback_Func cb_func, void *user_data)
+e_dbus_callback_new(E_DBus_Callback_Func cb_func, E_DBus_Unmarshal_Func 
unmarshal_func, void *user_data)
 {
   E_DBus_Callback *cb;
 
@@ -15,7 +15,8 @@
 
   cb = calloc(1, sizeof(E_DBus_Callback));
   if (!cb) return NULL;
-  cb->func = cb_func;
+  cb->cb_func = cb_func;
+  cb->unmarshal_func = unmarshal_func;
   cb->user_data = user_data;
   return cb;
 }
@@ -34,8 +35,18 @@
 void
 e_dbus_callback_call(E_DBus_Callback *cb, void *data, DBusError *error)
 {
-  if (cb && cb->func)
-    cb->func(cb->user_data, data, error);
+  if (cb && cb->cb_func)
+    cb->cb_func(cb->user_data, data, error);
+}
+
+//XXX this probably should be passed an error pointer
+void *
+e_dbus_callback_unmarshal(E_DBus_Callback *cb, DBusMessage *msg)
+{
+  if (cb && cb->unmarshal_func)
+    return cb->unmarshal_func(msg);
+  else
+    return NULL;
 }
 
 const char *



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to