diff --git a/vala/valainterface.vala b/vala/valainterface.vala index e3615c1..d726841 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -263,20 +263,32 @@ public class Vala.Interface : Typesymbol { */ public string! get_lower_case_csuffix () { if (lower_case_csuffix == null) { - lower_case_csuffix = camel_case_to_lower_case (name); - - // remove underscores in some cases to avoid conflicts of type macros - if (lower_case_csuffix.has_prefix ("type_")) { - lower_case_csuffix = "type" + lower_case_csuffix.offset ("type_".len ()); - } else if (lower_case_csuffix.has_prefix ("is_")) { - lower_case_csuffix = "is" + lower_case_csuffix.offset ("is_".len ()); - } - if (lower_case_csuffix.has_suffix ("_class")) { - lower_case_csuffix = lower_case_csuffix.substring (0, lower_case_csuffix.len () - "_class".len ()) + "class"; - } + lower_case_csuffix = get_default_lower_case_csuffix (); } return lower_case_csuffix; } + + /** + * Returns default string to be prepended to the name of members of this + * interface when used in C code. + * + * @return the suffix to be used in C code + */ + public string! get_default_lower_case_csuffix () { + string result = camel_case_to_lower_case (name); + + // remove underscores in some cases to avoid conflicts of type macros + if (result.has_prefix ("type_")) { + result = "type" + result.offset ("type_".len ()); + } else if (result.has_prefix ("is_")) { + result = "is" + result.offset ("is_".len ()); + } + if (result.has_suffix ("_class")) { + result = result.substring (0, result.len () - "_class".len ()) + "class"; + } + + return result; + } /** * Sets the string to be prepended to the name of members of this @@ -389,6 +401,9 @@ public class Vala.Interface : Typesymbol { add_cheader_filename (filename); } } + if (a.has_argument ("lower_case_csuffix")) { + lower_case_csuffix = a.get_string ("lower_case_csuffix"); + } } private void process_dbus_interface_attribute (Attribute! a) { diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index 10c8e93..c7d7ddf 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -240,7 +240,11 @@ public class Vala.InterfaceWriter : CodeVisitor { cheaders = "%s,%s".printf (cheaders, cheader); } } - write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders)); + write_string ("[CCode (cheader_filename = \"%s\"".printf (cheaders)); + if (iface.get_lower_case_csuffix () != iface.get_default_lower_case_csuffix ()) + write_string (", lower_case_csuffix = \"%s\"".printf (iface.get_lower_case_csuffix ())); + + write_string (")]"); write_newline (); write_indent (); diff --git a/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata b/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata index 4602013..4abc3ea 100644 --- a/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata +++ b/vapi/packages/gstreamer-interfaces-0.10/gstreamer-interfaces-0.10.metadata @@ -23,4 +23,4 @@ GstNavigation cheader_filename="gst/interfaces/navigation.h" GstPropertyProbe cheader_filename="gst/interfaces/propertyprobe.h" GstTuner cheader_filename="gst/interfaces/tunerchannel.h" GstVideoOrientation cheader_filename="gst/interfaces/videoorientation.h" -GstXOverlay cheader_filename="gst/interfaces/xoverlay.h" +GstXOverlay cheader_filename="gst/interfaces/xoverlay.h" lower_case_csuffix="x_overlay" diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index 1b9cae7..4fbd575 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -917,6 +917,8 @@ public class Vala.GIdlParser : CodeVisitor { var nv = attr.split ("=", 2); if (nv[0] == "cheader_filename") { iface.add_cheader_filename (eval (nv[1])); + } else if (nv[0] == "lower_case_csuffix") { + iface.set_lower_case_csuffix (eval (nv[1])); } } }