diff --git a/vala/valaenum.vala b/vala/valaenum.vala index fc1ca1c..8b98806 100644 --- a/vala/valaenum.vala +++ b/vala/valaenum.vala @@ -33,6 +33,9 @@ public class Vala.Enum : Typesymbol { public bool is_flags { get; set; } public bool has_type_id { + set construct { + _has_type_id = value; + } get { return _has_type_id; } @@ -44,7 +47,7 @@ public class Vala.Enum : Typesymbol { private string cprefix; private string lower_case_cprefix; private string lower_case_csuffix; - private bool _has_type_id = true; + private bool _has_type_id; private string type_id; /** @@ -54,7 +57,7 @@ public class Vala.Enum : Typesymbol { * @param source_reference reference to source code * @return newly created enum */ - public Enum (construct string! name, construct SourceReference source_reference = null) { + public Enum (construct string! name, construct SourceReference source_reference = null, construct bool has_type_id = true) { } /** @@ -220,6 +223,10 @@ public class Vala.Enum : Typesymbol { } } + public void set_type_id (string! type_id) { + this.type_id = type_id; + } + public override string get_type_id () { if (type_id == null) { if (_has_type_id) { diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index 10c8e93..6cc6a7a 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -306,7 +306,12 @@ public class Vala.InterfaceWriter : CodeVisitor { cheaders = "%s,%s".printf (cheaders, cheader); } } - write_string ("[CCode (cprefix = \"%s\", cheader_filename = \"%s\")]".printf (en.get_cprefix (), cheaders)); + + write_string ("[CCode (cprefix = \"%s\", ".printf (en.get_cprefix ())); + + write_string ("has_type_id = \"%d\", ".printf (en.has_type_id)); + + write_string ("cheader_filename = \"%s\")]".printf (cheaders)); if (en.is_flags) { write_indent (); diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index 2d8404b..7d369bd 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -712,14 +712,20 @@ public class Vala.GIdlParser : CodeVisitor { private Typesymbol parse_enum (IdlNodeEnum! en_node) { weak IdlNode node = (IdlNode) en_node; - + bool has_type = false; + if (en_node.deprecated) { return null; } - var en = new Enum (node.name, current_source_reference); + if (en_node.gtype_name != null && en_node.gtype_name != "") { + has_type = true; + } + + var en = new Enum (node.name, current_source_reference, has_type); en.access = SymbolAccessibility.PUBLIC; + string common_prefix = null; foreach (weak IdlNode value in en_node.values) {