]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support enums in D-Bus clients and servers, fixes bug 534105
authorJürg Billeter <j@bitron.ch>
Wed, 5 Nov 2008 18:17:57 +0000 (18:17 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 5 Nov 2008 18:17:57 +0000 (18:17 +0000)
2008-11-05  Jürg Billeter  <j@bitron.ch>

* 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

ChangeLog
gobject/valadbusclientmodule.vala
gobject/valagsignalmodule.vala
vala/valaenum.vala

index d734a33d0f62278d45397ff76ce481d237102b06..76ed79cc5077ea013c9fd9296252a9985291c430 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-11-05  Jürg Billeter  <j@bitron.ch>
+
+       * 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  <j@bitron.ch>
 
        * gobject/Makefile.am:
index ae9415df2aac06893f573495573e7eff56af7d30..c4dc2564f8b83a2a68a39db76b775a0bc50bd2f9 100644 (file)
@@ -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");
index 0e419771d59259ad1786c31a9b932a56e5565834..0f787fcc98c3d78aae7b41352c975b4db01111fe 100644 (file)
@@ -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 ()));
                        }
index fc3b8064d5b423d0acaf156f818a7b34ab85a073..a302734f9c9349a314778f82842fdfa78dfe254c 100644 (file)
@@ -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";
+               }
+       }
 }