/* void setAttribute (in nsIAtom name, in AString newValue); */ NS_IMETHODIMP xgGtkElement::SetAttribute (nsIAtom *name, const nsAString &newValue) { GOM_ASTRING_TO_GSTRING_RETURN (value, newValue, NS_ERROR_INVALID_ARG); GParamSpec *spec; guint signal_id; if (!Resolve (name, &spec, &signal_id)) { return NS_ERROR_FAILURE; } if (!spec) { return NS_ERROR_FAILURE; } GError *error = NULL; GValue gval = { 0 }; if (G_TYPE_FUNDAMENTAL (G_PARAM_SPEC_VALUE_TYPE (spec)) == G_TYPE_OBJECT) { g_warning (GOM_LOC ("Attribute %s.%s is a %s, which a string cannot be converted to"), G_OBJECT_TYPE_NAME (mObject), spec->name, g_type_name (G_PARAM_SPEC_VALUE_TYPE (spec))); return NS_ERROR_FAILURE; } else if (gtk_builder_value_from_string (NULL, spec, value, &gval, &error)) { g_object_set_property (mObject, spec->name, &gval); g_value_unset (&gval); } else { g_warning (GOM_LOC ("Could not get value from string: '%s'"), value); return NS_ERROR_FAILURE; } return NS_OK; }
/* Cell packing parsing */ static void gtk_cell_layout_buildable_set_cell_property (GtkCellArea *area, GtkBuilder *builder, GtkCellRenderer *cell, gchar *name, const gchar *value) { GParamSpec *pspec; GValue gvalue = G_VALUE_INIT; GError *error = NULL; pspec = gtk_cell_area_class_find_cell_property (GTK_CELL_AREA_GET_CLASS (area), name); if (!pspec) { g_warning ("%s does not have a property called %s", g_type_name (G_OBJECT_TYPE (area)), name); return; } if (!gtk_builder_value_from_string (builder, pspec, value, &gvalue, &error)) { g_warning ("Could not read property %s:%s with value %s of type %s: %s", g_type_name (G_OBJECT_TYPE (area)), name, value, g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)), error->message); g_error_free (error); return; } gtk_cell_area_cell_set_property (area, cell, name, &gvalue); g_value_unset (&gvalue); }
static void append_child_attrs_foreach (gpointer key, gpointer value, gpointer user_data) { if (!value) { return; } GParamSpec *spec; GError *error = NULL; GValue gval = { 0 }; GtkWidget *child = GTK_WIDGET (user_data); GtkWidget *parent = gtk_widget_get_parent (child); spec = gtk_container_class_find_child_property (G_OBJECT_GET_CLASS (parent), (char *)key); if (!spec || G_TYPE_FUNDAMENTAL (G_PARAM_SPEC_VALUE_TYPE (spec)) == G_TYPE_OBJECT) { return; } #if 1 g_print ("found child property %s.%s on %s\n", g_type_name (G_TYPE_FROM_INSTANCE (parent)), spec->name, g_type_name (G_TYPE_FROM_INSTANCE (child))); #endif if (gtk_builder_value_from_string (NULL, spec, g_value_get_string ((const GValue *)value), &gval, &error)) { gtk_container_child_set_property (GTK_CONTAINER (parent), child, spec->name, &gval); g_value_unset (&gval); } else { g_print ("Error getting value_from_string: %s\n", error->message); g_error_free (error); } }
static void views_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { ViewsParserData *parser_data = user_data; GParamSpec *pspec; GtkWidget *item; GValue value = { 0 }; g_assert (parser_data != NULL); if (parser_data->property_name == NULL) return; item = g_queue_peek_head (parser_data->stack); if (item == NULL) return; pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (item), parser_data->property_name); if (pspec == NULL) { g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_PROPERTY, "No such property: %s", parser_data->property_name); return; } if (parser_data->translatable) text = _(text); if (g_type_is_a (pspec->value_type, G_TYPE_OBJECT)) { GObject *relative; relative = gtk_builder_get_object (parser_data->builder, text); if (relative == NULL) { g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_VALUE, "Unknown object for property '%s': %s", parser_data->property_name, text); return; } g_value_init (&value, pspec->value_type); g_value_set_object (&value, relative); } else if (!gtk_builder_value_from_string (parser_data->builder, pspec, text, &value, error)) return; if (parser_data->search_item != NULL) g_object_set_property (G_OBJECT (parser_data->search_item), parser_data->property_name, &value); g_object_set_property (G_OBJECT (item), parser_data->property_name, &value); g_value_unset (&value); }