From: Jürg Billeter Date: Sun, 9 Nov 2008 23:12:41 +0000 (+0000) Subject: Work around missing enum support in dbus-glib X-Git-Tag: VALA_0_5_2~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef2a5af23c8596f9b5e0805ed1cd7ee628fb3cf2;p=thirdparty%2Fvala.git Work around missing enum support in dbus-glib 2008-11-10 Jürg Billeter * gobject/valadbusservermodule.vala: Work around missing enum support in dbus-glib svn path=/trunk/; revision=2008 --- diff --git a/ChangeLog b/ChangeLog index d945bb92f..0d7530e0e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-11-10 Jürg Billeter + + * gobject/valadbusservermodule.vala: + + Work around missing enum support in dbus-glib + 2008-11-10 Jürg Billeter * gobject/valadbusservermodule.vala: diff --git a/gobject/valadbusservermodule.vala b/gobject/valadbusservermodule.vala index 5b1a8d7c2..67c16e2e9 100644 --- a/gobject/valadbusservermodule.vala +++ b/gobject/valadbusservermodule.vala @@ -255,12 +255,27 @@ public class Vala.DBusServerModule : DBusClientModule { var val_ptr = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (val_name)); + string type_id = f.field_type.data_type.get_type_id (); + string set_value_function = f.field_type.data_type.get_set_value_function (); + + if (f.field_type.data_type is Enum) { + // dbus-glib does not support enums + var en = (Enum) f.field_type.data_type; + if (!en.is_flags) { + type_id = "G_TYPE_INT"; + set_value_function = "g_value_set_int"; + } else { + type_id = "G_TYPE_UINT"; + set_value_function = "g_value_set_uint"; + } + } + var cinit_call = new CCodeFunctionCall (new CCodeIdentifier ("g_value_init")); cinit_call.add_argument (val_ptr); - cinit_call.add_argument (new CCodeIdentifier (f.field_type.data_type.get_type_id ())); + cinit_call.add_argument (new CCodeIdentifier (type_id)); block.add_statement (new CCodeExpressionStatement (cinit_call)); - var cset_call = new CCodeFunctionCall (new CCodeIdentifier (f.field_type.data_type.get_set_value_function ())); + var cset_call = new CCodeFunctionCall (new CCodeIdentifier (set_value_function)); cset_call.add_argument (val_ptr); if (f.field_type.data_type is Struct) { cset_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeMemberAccess (st_expr, f.name)));