+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:
}
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");
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 ();
}
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 ();
}
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 ()));
}