Convert multiple return values to structs.

Python DBus bindings are unable to implement methods that return multiple
values.
This commit is contained in:
Tambet Ingo
2008-12-17 13:35:22 +02:00
parent 614aa0316a
commit a1223a9eaf
6 changed files with 64 additions and 59 deletions
+26 -2
View File
@@ -75,8 +75,32 @@ info_call_done (MMModemGsmCard *self,
if (error)
dbus_g_method_return_error (context, error);
else
dbus_g_method_return (context, manufacturer, model, version);
else {
GValueArray *array;
GValue value = { 0, };
array = g_value_array_new (3);
/* Manufacturer */
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, manufacturer);
g_value_array_append (array, &value);
g_value_unset (&value);
/* Model */
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, model);
g_value_array_append (array, &value);
g_value_unset (&value);
/* Version */
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, version);
g_value_array_append (array, &value);
g_value_unset (&value);
dbus_g_method_return (context, array);
}
}
static void
+27 -4
View File
@@ -116,9 +116,30 @@ reg_info_call_done (MMModemGsmNetwork *self,
if (error)
dbus_g_method_return_error (context, error);
else {
dbus_g_method_return (context, status,
oper_code ? oper_code : "",
oper_name ? oper_name : "");
GValueArray *array;
GValue value = { 0, };
array = g_value_array_new (3);
/* Status */
g_value_init (&value, G_TYPE_UINT);
g_value_set_uint (&value, (guint32) status);
g_value_array_append (array, &value);
g_value_unset (&value);
/* Operator code */
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, oper_code);
g_value_array_append (array, &value);
g_value_unset (&value);
/* Operator name */
g_value_init (&value, G_TYPE_STRING);
g_value_set_string (&value, oper_name);
g_value_array_append (array, &value);
g_value_unset (&value);
dbus_g_method_return (context, array);
}
}
@@ -330,7 +351,9 @@ mm_modem_gsm_network_registration_info (MMModemGsmNetwork *self,
{
g_return_if_fail (MM_IS_MODEM_GSM_NETWORK (self));
g_signal_emit (self, signals[REGISTRATION_INFO], 0, status, oper_code, oper_name);
g_signal_emit (self, signals[REGISTRATION_INFO], 0, status,
oper_code ? oper_code : "",
oper_name ? oper_name : "");
}
void