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