static void glade_gtk_widget_write_atk_relation (GladeProperty * property, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *prop_node; GladePropertyClass *pclass; gchar *value, **split; gint i; if ((value = glade_widget_adaptor_string_from_value (glade_property_class_get_adaptor (glade_property_get_class (property)), glade_property_get_class (property), glade_property_inline_value (property))) != NULL) { if ((split = g_strsplit (value, GPC_OBJECT_DELIMITER, 0)) != NULL) { for (i = 0; split[i] != NULL; i++) { pclass = glade_property_get_class (property); prop_node = glade_xml_node_new (context, GLADE_TAG_A11Y_RELATION); glade_xml_node_append_child (node, prop_node); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_TYPE, glade_property_class_id (pclass)); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_TARGET, split[i]); } g_strfreev (split); } } }
GladeXmlNode * glade_accel_write (GladeAccelInfo * accel, GladeXmlContext * context, gboolean write_signal) { GladeXmlNode *accel_node; gchar *modifiers; g_return_val_if_fail (accel != NULL, NULL); g_return_val_if_fail (context != NULL, NULL); accel_node = glade_xml_node_new (context, GLADE_TAG_ACCEL); modifiers = glade_gtk_modifier_string_from_bits (accel->modifiers); glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_KEY, gdk_keyval_name (accel->key)); if (write_signal) glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_SIGNAL, accel->signal); glade_xml_node_set_property_string (accel_node, GLADE_TAG_ACCEL_MODIFIERS, modifiers); g_free (modifiers); return accel_node; }
static void glade_gtk_window_write_accel_groups (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *groups_node, *group_node; GList *groups = NULL, *list; GladeWidget *agroup; groups_node = glade_xml_node_new (context, GLADE_TAG_ACCEL_GROUPS); if (glade_widget_property_get (widget, "accel-groups", &groups)) { for (list = groups; list; list = list->next) { agroup = glade_widget_get_from_gobject (list->data); group_node = glade_xml_node_new (context, GLADE_TAG_ACCEL_GROUP); glade_xml_node_append_child (groups_node, group_node); glade_xml_node_set_property_string (group_node, GLADE_TAG_NAME, glade_widget_get_name (agroup)); } } if (!glade_xml_node_get_children (groups_node)) glade_xml_node_delete (groups_node); else glade_xml_node_append_child (node, groups_node); }
/* Shared with other classes */ void glade_gtk_write_icon_size (GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node, const gchar *prop_name) { GladeXmlNode *prop_node; GladeProperty *size_prop; GtkIconSize icon_size; gchar *value; /* We have to save icon-size as an integer, the core will take care of * loading the int value though. */ size_prop = glade_widget_get_property (widget, prop_name); if (glade_property_get_enabled (size_prop) && !glade_property_original_default (size_prop)) { gchar *write_prop_name = g_strdup (prop_name); glade_util_replace (write_prop_name, '-', '_'); prop_node = glade_xml_node_new (context, GLADE_TAG_PROPERTY); glade_xml_node_append_child (node, prop_node); glade_xml_node_set_property_string (prop_node, GLADE_TAG_NAME, write_prop_name); glade_property_get (size_prop, &icon_size); value = g_strdup_printf ("%d", icon_size); glade_xml_set_content (prop_node, value); g_free (value); g_free (write_prop_name); } }
static void glade_gtk_size_group_write_widgets (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *widgets_node, *widget_node; GList *widgets = NULL, *list; GladeWidget *awidget; widgets_node = glade_xml_node_new (context, GLADE_TAG_SIZEGROUP_WIDGETS); if (glade_widget_property_get (widget, "widgets", &widgets)) { for (list = widgets; list; list = list->next) { awidget = glade_widget_get_from_gobject (list->data); widget_node = glade_xml_node_new (context, GLADE_TAG_SIZEGROUP_WIDGET); glade_xml_node_append_child (widgets_node, widget_node); glade_xml_node_set_property_string (widget_node, GLADE_TAG_NAME, glade_widget_get_name (awidget)); } } if (!glade_xml_node_get_children (widgets_node)) glade_xml_node_delete (widgets_node); else glade_xml_node_append_child (node, widgets_node); }
static void glade_gtk_widget_write_style_classes (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *class_node, *style_node; GList *string_list = NULL, *l; GladeString *string; if (!glade_widget_property_get (widget, "glade-style-classes", &string_list) || !string_list) return; style_node = glade_xml_node_new (context, GLADE_TAG_STYLE); for (l = string_list; l; l = l->next) { string = l->data; class_node = glade_xml_node_new (context, GLADE_TAG_CLASS); glade_xml_node_append_child (style_node, class_node); glade_xml_node_set_property_string (class_node, GLADE_TAG_NAME, string->string); } if (!glade_xml_node_get_children (style_node)) glade_xml_node_delete (style_node); else glade_xml_node_append_child (node, style_node); }
static void glade_gtk_widget_write_atk_properties (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *child_node, *object_node; GladeProperty *name_prop, *desc_prop; name_prop = glade_widget_get_property (widget, "AtkObject::accessible-name"); desc_prop = glade_widget_get_property (widget, "AtkObject::accessible-description"); /* Create internal child here if any of these properties are non-null */ if (!glade_property_default (name_prop) || !glade_property_default (desc_prop)) { gchar *atkname = g_strdup_printf ("%s-atkobject", glade_widget_get_name (widget)); child_node = glade_xml_node_new (context, GLADE_XML_TAG_CHILD); glade_xml_node_append_child (node, child_node); glade_xml_node_set_property_string (child_node, GLADE_XML_TAG_INTERNAL_CHILD, GLADE_TAG_A11Y_INTERNAL_NAME); object_node = glade_xml_node_new (context, GLADE_XML_TAG_WIDGET); glade_xml_node_append_child (child_node, object_node); glade_xml_node_set_property_string (object_node, GLADE_XML_TAG_CLASS, "AtkObject"); glade_xml_node_set_property_string (object_node, GLADE_XML_TAG_ID, atkname); if (!glade_property_default (name_prop)) glade_gtk_widget_write_atk_property (name_prop, context, object_node); if (!glade_property_default (desc_prop)) glade_gtk_widget_write_atk_property (desc_prop, context, object_node); g_free (atkname); } }
static void glade_gtk_combo_box_text_write_items (GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node) { GladeXmlNode *item_node; GList *string_list = NULL, *l; GladeString *string; if (!glade_widget_property_get (widget, "glade-items", &string_list) || !string_list) return; for (l = string_list; l; l = l->next) { string = l->data; item_node = glade_xml_node_new (context, GLADE_TAG_ITEM); glade_xml_node_append_child (node, item_node); glade_xml_set_content (item_node, string->string); if (string->id) glade_xml_node_set_property_string (item_node, GLADE_TAG_ID, string->id); if (string->translatable) glade_xml_node_set_property_string (item_node, GLADE_TAG_TRANSLATABLE, GLADE_XML_TAG_I18N_TRUE); if (string->comment) glade_xml_node_set_property_string (item_node, GLADE_TAG_COMMENT, string->comment); if (string->context) glade_xml_node_set_property_string (item_node, GLADE_TAG_CONTEXT, string->context); } }
static void glade_gtk_widget_write_atk_property (GladeProperty * property, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *prop_node; GladePropertyClass *pclass; gchar *value; glade_property_get (property, &value); if (value && value[0]) { pclass = glade_property_get_class (property); prop_node = glade_xml_node_new (context, GLADE_TAG_A11Y_PROPERTY); glade_xml_node_append_child (node, prop_node); glade_xml_node_set_property_string (prop_node, GLADE_TAG_NAME, glade_property_class_id (pclass)); glade_xml_set_content (prop_node, value); if (glade_property_i18n_get_translatable (property)) glade_xml_node_set_property_string (prop_node, GLADE_TAG_TRANSLATABLE, GLADE_XML_TAG_I18N_TRUE); if (glade_property_i18n_get_comment (property)) glade_xml_node_set_property_string (prop_node, GLADE_TAG_COMMENT, glade_property_i18n_get_comment (property)); if (glade_property_i18n_get_context (property)) glade_xml_node_set_property_string (prop_node, GLADE_TAG_CONTEXT, glade_property_i18n_get_context (property)); } }
static void glade_gtk_widget_write_atk_action (GladeProperty * property, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *prop_node; GladePropertyClass *pclass; gchar *value = NULL; glade_property_get (property, &value); if (value && value[0]) { pclass = glade_property_get_class (property); prop_node = glade_xml_node_new (context, GLADE_TAG_A11Y_ACTION); glade_xml_node_append_child (node, prop_node); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_ACTION_NAME, &glade_property_class_id (pclass)[4]); glade_xml_node_set_property_string (prop_node, GLADE_TAG_A11Y_DESC, value); } }
/** * glade_property_write: * @property: a #GladeProperty * @context: A #GladeXmlContext * @node: A #GladeXmlNode * * Write @property to @node */ void glade_property_write (GladeProperty * property, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *prop_node; gchar *name, *value; gboolean save_always; g_return_if_fail (GLADE_IS_PROPERTY (property)); g_return_if_fail (node != NULL); /* This code should work the same for <packing>, <widget> and <template> */ if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_PACKING) || glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) || glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE))) return; /* There can be a couple of reasons to forcefully save a property */ save_always = (glade_property_class_save_always (property->priv->klass) || property->priv->save_always); save_always = save_always || (glade_property_class_optional (property->priv->klass) && property->priv->enabled); /* Skip properties that are default by original pspec default * (excepting those that specified otherwise). */ if (!save_always && glade_property_original_default (property)) return; /* Escape our string and save with underscores */ name = g_strdup (glade_property_class_id (property->priv->klass)); glade_util_replace (name, '-', '_'); /* convert the value of this property to a string */ if (!(value = glade_widget_adaptor_string_from_value (glade_property_class_get_adaptor (property->priv->klass), property->priv->klass, property->priv->value))) /* make sure we keep the empty string, also... upcomming * funcs that may not like NULL. */ value = g_strdup (""); /* Now dump the node values... */ prop_node = glade_xml_node_new (context, GLADE_XML_TAG_PROPERTY); glade_xml_node_append_child (node, prop_node); /* Name and value */ glade_xml_node_set_property_string (prop_node, GLADE_XML_TAG_NAME, name); glade_xml_set_content (prop_node, value); /* i18n stuff */ if (glade_property_class_translatable (property->priv->klass)) { if (property->priv->i18n_translatable) glade_xml_node_set_property_string (prop_node, GLADE_TAG_TRANSLATABLE, GLADE_XML_TAG_I18N_TRUE); if (property->priv->i18n_context) glade_xml_node_set_property_string (prop_node, GLADE_TAG_CONTEXT, property->priv->i18n_context); if (property->priv->i18n_comment) glade_xml_node_set_property_string (prop_node, GLADE_TAG_COMMENT, property->priv->i18n_comment); } g_free (name); g_free (value); }
static void write_icon_sources (gchar *icon_name, GList *sources, SourceWriteTab *tab) { GladeXmlNode *source_node; GtkIconSource *source; GList *l; gchar *string; GdkPixbuf *pixbuf; for (l = sources; l; l = l->next) { source = l->data; source_node = glade_xml_node_new (tab->context, GLADE_TAG_SOURCE); glade_xml_node_append_child (tab->node, source_node); glade_xml_node_set_property_string (source_node, GLADE_TAG_STOCK_ID, icon_name); G_GNUC_BEGIN_IGNORE_DEPRECATIONS if (!gtk_icon_source_get_direction_wildcarded (source)) { GtkTextDirection direction = gtk_icon_source_get_direction (source); G_GNUC_END_IGNORE_DEPRECATIONS string = glade_utils_enum_string_from_value (GTK_TYPE_TEXT_DIRECTION, direction); glade_xml_node_set_property_string (source_node, GLADE_TAG_DIRECTION, string); g_free (string); } G_GNUC_BEGIN_IGNORE_DEPRECATIONS if (!gtk_icon_source_get_size_wildcarded (source)) { GtkIconSize size = gtk_icon_source_get_size (source); G_GNUC_END_IGNORE_DEPRECATIONS string = glade_utils_enum_string_from_value (GTK_TYPE_ICON_SIZE, size); glade_xml_node_set_property_string (source_node, GLADE_TAG_SIZE, string); g_free (string); } G_GNUC_BEGIN_IGNORE_DEPRECATIONS if (!gtk_icon_source_get_state_wildcarded (source)) { GtkStateType state = gtk_icon_source_get_state (source); G_GNUC_END_IGNORE_DEPRECATIONS string = glade_utils_enum_string_from_value (GTK_TYPE_STATE_TYPE, state); glade_xml_node_set_property_string (source_node, GLADE_TAG_STATE, string); g_free (string); } G_GNUC_BEGIN_IGNORE_DEPRECATIONS pixbuf = gtk_icon_source_get_pixbuf (source); G_GNUC_END_IGNORE_DEPRECATIONS string = g_object_get_data (G_OBJECT (pixbuf), "GladeFileName"); glade_xml_node_set_property_string (source_node, GLADE_TAG_FILENAME, string); } }