From: Jürg Billeter Date: Wed, 5 Nov 2008 18:17:57 +0000 (+0000) Subject: Support enums in D-Bus clients and servers, fixes bug 534105 X-Git-Tag: VALA_0_5_2~129 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7aa4aa398c73a12dcc409f7bc19ddfaf7cb64acf;p=thirdparty%2Fvala.git Support enums in D-Bus clients and servers, fixes bug 534105 2008-11-05 Jürg Billeter * vala/valaenum.vala: * gobject/valadbusclientmodule.vala: * gobject/valagsignalmodule.vala: Support enums in D-Bus clients and servers, fixes bug 534105 svn path=/trunk/; revision=1982 --- diff --git a/ChangeLog b/ChangeLog index d734a33d0..76ed79cc5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-11-05 Jürg Billeter + + * vala/valaenum.vala: + * gobject/valadbusclientmodule.vala: + * gobject/valagsignalmodule.vala: + + Support enums in D-Bus clients and servers, fixes bug 534105 + 2008-11-05 Jürg Billeter * gobject/Makefile.am: diff --git a/gobject/valadbusclientmodule.vala b/gobject/valadbusclientmodule.vala index ae9415df2..c4dc2564f 100644 --- a/gobject/valadbusclientmodule.vala +++ b/gobject/valadbusclientmodule.vala @@ -460,6 +460,13 @@ public class Vala.DBusClientModule : GAsyncModule { } carray_type.add_argument (get_dbus_g_type (array_type.element_type)); return carray_type; + } else if (data_type.data_type is Enum) { + var en = (Enum) data_type.data_type; + if (en.is_flags) { + return new CCodeIdentifier ("G_TYPE_UINT"); + } else { + return new CCodeIdentifier ("G_TYPE_INT"); + } } else if (data_type.data_type == null) { critical ("Internal error during DBus type generation with: %s", data_type.to_string ()); return new CCodeIdentifier ("G_TYPE_NONE"); diff --git a/gobject/valagsignalmodule.vala b/gobject/valagsignalmodule.vala index 0e419771d..0f787fcc9 100644 --- a/gobject/valagsignalmodule.vala +++ b/gobject/valagsignalmodule.vala @@ -47,6 +47,17 @@ public class Vala.GSignalModule : GObjectModule { return ("VOID"); } else if (dbus && t.get_type_signature ().has_prefix ("(")) { return ("BOXED"); + } else if (t.data_type is Enum) { + var en = (Enum) t.data_type; + if (dbus) { + if (en.is_flags) { + return ("UINT"); + } else { + return ("INT"); + } + } else { + return en.get_marshaller_type_name (); + } } else { return t.data_type.get_marshaller_type_name (); } @@ -266,6 +277,13 @@ public class Vala.GSignalModule : GObjectModule { get_value_function = "g_value_get_pointer"; } else if (dbus && p.parameter_type.get_type_signature ().has_prefix ("(")) { get_value_function = "g_value_get_boxed"; + } else if (dbus && p.parameter_type.data_type is Enum) { + var en = (Enum) p.parameter_type.data_type; + if (en.is_flags) { + get_value_function = "g_value_get_uint"; + } else { + get_value_function = "g_value_get_int"; + } } else { get_value_function = p.parameter_type.data_type.get_get_value_function (); } @@ -306,6 +324,13 @@ public class Vala.GSignalModule : GObjectModule { set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_take_object")); } else if (dbus && return_type.get_type_signature ().has_prefix ("(")) { set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_take_boxed")); + } else if (dbus && return_type.data_type is Enum) { + var en = (Enum) return_type.data_type; + if (en.is_flags) { + set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_set_uint")); + } else { + set_fc = new CCodeFunctionCall (new CCodeIdentifier ("g_value_set_int")); + } } else { set_fc = new CCodeFunctionCall (new CCodeIdentifier (return_type.data_type.get_set_value_function ())); } diff --git a/vala/valaenum.vala b/vala/valaenum.vala index fc3b8064d..a302734f9 100644 --- a/vala/valaenum.vala +++ b/vala/valaenum.vala @@ -289,4 +289,12 @@ public class Vala.Enum : TypeSymbol { public override string? get_default_value () { return "0"; } + + public override string? get_type_signature () { + if (is_flags) { + return "u"; + } else { + return "i"; + } + } }