From 17905c54f1bab9e6dfe13f59f5ec208de12832f7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 6 Sep 2013 16:57:01 -0400 Subject: [PATCH] [introspection] Work around g-i limitation with hb_language_t --- src/hb-gobject-structs.cc | 15 +++++++++++---- src/hb-gobject-structs.h | 8 ++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/hb-gobject-structs.cc b/src/hb-gobject-structs.cc index 652554214..2451b6629 100644 --- a/src/hb-gobject-structs.cc +++ b/src/hb-gobject-structs.cc @@ -94,10 +94,6 @@ static hb_glyph_position_t *glyph_position_reference (hb_glyph_position_t *g) static void glyph_position_destroy (hb_glyph_position_t *g) { free (g); } HB_DEFINE_BOXED_TYPE (glyph_position, glyph_position_reference, glyph_position_destroy) -static hb_language_t language_reference (hb_language_t l) { return l; } -static void language_destroy (hb_language_t l) { } -HB_DEFINE_BOXED_TYPE (language, language_reference, language_destroy) - static hb_segment_properties_t *segment_properties_reference (hb_segment_properties_t *g) { hb_segment_properties_t *c = (hb_segment_properties_t *) calloc (1, sizeof (hb_segment_properties_t)); @@ -111,3 +107,14 @@ HB_DEFINE_BOXED_TYPE (segment_properties, segment_properties_reference, segment_ static hb_user_data_key_t user_data_key_reference (hb_user_data_key_t l) { return l; } static void user_data_key_destroy (hb_user_data_key_t l) { } HB_DEFINE_BOXED_TYPE (user_data_key, user_data_key_reference, user_data_key_destroy) + + +static hb_language_t *language_reference (hb_language_t *l) +{ + hb_language_t *c = (hb_language_t *) calloc (1, sizeof (hb_language_t)); + if (unlikely (!c)) return NULL; + *c = *l; + return c; +} +static void language_destroy (hb_language_t *l) { free (l); } +HB_DEFINE_BOXED_TYPE (language, language_reference, language_destroy) diff --git a/src/hb-gobject-structs.h b/src/hb-gobject-structs.h index 48af088ed..4a88d569e 100644 --- a/src/hb-gobject-structs.h +++ b/src/hb-gobject-structs.h @@ -81,6 +81,14 @@ GType hb_gobject_segment_properties_get_type (void); GType hb_gobject_user_data_key_get_type (void); #define HB_GOBJECT_TYPE_USER_DATA_KEY (hb_gobject_user_data_key_get_type ()) +/* Currently gobject-introspection doesn't understand that hb_language_t + * can be passed by-value. As such we box it up. May remove in the + * future. + * + * https://bugzilla.gnome.org/show_bug.cgi?id=707656 + */ +GType hb_gobject_language_get_type (void); +#define HB_GOBJECT_TYPE_LANGUAGE (hb_gobject_language_get_type ()) HB_END_DECLS