grim/guifications3

7f179936a42f
work around glib bug 600505. it's ugly, but it works.
--- a/gflib/gflib/gf_type.c Tue Oct 27 01:23:10 2009 -0500
+++ b/gflib/gflib/gf_type.c Mon Nov 02 21:14:09 2009 -0600
@@ -91,16 +91,40 @@
gf_type_query_context_real_query_object(GfTypeQueryContext *ctx, GType type) {
GfTypeQueryContextPrivate *priv = GF_TYPE_QUERY_CONTEXT_GET_PRIVATE(ctx);
GObjectClass *klass = NULL;
- GTypeQuery query;
+ GTypePlugin *plugin = NULL;
+ GTypeQuery *query = NULL;
guint t = 0;
/* handle the passed in type */
klass = g_type_class_ref(type);
- g_type_query(type, &query);
+ /* work around for glib bug 600505, refer to that at some point to see if
+ * this can be cleaned up.
+ *
+ * https://bugzilla.gnome.org/show_bug.cgi?id=600505
+ */
+ query = g_new0(GTypeQuery, 1);
+
+ plugin = g_type_get_plugin(type);
+ if(plugin) {
+ GTypeInfo info;
+ GTypeValueTable table;
+
+ /* we don't use table, but it needs to be there to shutup a runtime
+ * warning.
+ */
+ g_type_plugin_complete_type_info(plugin, type, &info, &table);
+
+ query->type = type;
+ query->type_name = g_type_name(type);
+ query->class_size = info.class_size;
+ query->instance_size = info.instance_size;
+ } else {
+ g_type_query(type, query);
+ }
if(priv->query->start_object)
- priv->query->start_object(ctx, &query, priv->data);
+ priv->query->start_object(ctx, query, priv->data);
/* if the query doesn't have a function for params signals don't bother
* with digging through them.
@@ -116,7 +140,7 @@
* children.
*/
if(priv->query->end_object)
- priv->query->end_object(ctx, &query, priv->data);
+ priv->query->end_object(ctx, query, priv->data);
/* now dig through the children if we're recursive */
if(priv->recursive) {
@@ -135,6 +159,8 @@
g_free(types);
}
+ g_free(query);
+
g_type_class_unref(klass);
}