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_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); }
void glade_gtk_file_filter_write_widget (GladeWidgetAdaptor *adaptor, GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node) { GladeXmlNode *strings_node; if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) || glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE))) return; /* First chain up and read in all the normal properties.. */ GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node); strings_node = glade_xml_node_new (context, GLADE_TAG_MIME_TYPES); glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_MIME, "glade-mime-types"); if (!glade_xml_node_get_children (strings_node)) glade_xml_node_delete (strings_node); else glade_xml_node_append_child (node, strings_node); strings_node = glade_xml_node_new (context, GLADE_TAG_PATTERNS); glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_PATTERN, "glade-patterns"); if (!glade_xml_node_get_children (strings_node)) glade_xml_node_delete (strings_node); else glade_xml_node_append_child (node, strings_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); }
void glade_gtk_combo_box_text_write_widget (GladeWidgetAdaptor *adaptor, GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node) { GladeXmlNode *attrs_node; if (!(glade_xml_node_verify_silent (node, GLADE_XML_TAG_WIDGET) || glade_xml_node_verify_silent (node, GLADE_XML_TAG_TEMPLATE))) return; /* First chain up and read in all the normal properties.. */ GWA_GET_CLASS (GTK_TYPE_COMBO_BOX)->write_widget (adaptor, widget, context, node); attrs_node = glade_xml_node_new (context, GLADE_TAG_ITEMS); glade_gtk_combo_box_text_write_items (widget, context, attrs_node); if (!glade_xml_node_get_children (attrs_node)) glade_xml_node_delete (attrs_node); else glade_xml_node_append_child (node, attrs_node); }
static void glade_gtk_icon_factory_write_sources (GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node) { GladeXmlNode *sources_node; GladeIconSources *sources = NULL; SourceWriteTab tab; glade_widget_property_get (widget, "sources", &sources); if (!sources) return; sources_node = glade_xml_node_new (context, GLADE_TAG_SOURCES); tab.context = context; tab.node = sources_node; g_hash_table_foreach (sources->sources, (GHFunc) write_icon_sources, &tab); if (!glade_xml_node_get_children (sources_node)) glade_xml_node_delete (sources_node); else glade_xml_node_append_child (node, sources_node); }
static void glade_gtk_filter_write_strings (GladeWidget *widget, GladeXmlContext *context, GladeXmlNode *node, FilterType type, const gchar *property_name) { GladeXmlNode *item_node; GList *string_list = NULL, *l; GladeString *string; const gchar *string_tag; switch (type) { case FILTER_PATTERN: string_tag = GLADE_TAG_PATTERN; break; case FILTER_MIME: string_tag = GLADE_TAG_MIME_TYPE; break; case FILTER_APPLICATION: string_tag = GLADE_TAG_APPLICATION; break; default: g_assert_not_reached (); break; } if (!glade_widget_property_get (widget, property_name, &string_list) || !string_list) return; for (l = string_list; l; l = l->next) { string = l->data; item_node = glade_xml_node_new (context, string_tag); glade_xml_node_append_child (node, item_node); glade_xml_set_content (item_node, string->string); } }
/* 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_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); } } }
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_widget_write_atk_props (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node) { GladeXmlNode *atk_node; atk_node = glade_xml_node_new (context, GLADE_TAG_A11Y_A11Y); glade_gtk_widget_write_atk_relations (widget, context, atk_node); glade_gtk_widget_write_atk_actions (widget, context, atk_node); if (!glade_xml_node_get_children (atk_node)) glade_xml_node_delete (atk_node); else glade_xml_node_append_child (node, atk_node); glade_gtk_widget_write_atk_properties (widget, context, node); }
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); } }
void glade_gtk_write_accels (GladeWidget * widget, GladeXmlContext * context, GladeXmlNode * node, gboolean write_signal) { GladeXmlNode *accel_node; GladeProperty *property; GList *list; /* Some child widgets may have disabled the property */ if (!(property = glade_widget_get_property (widget, "accelerator"))) return; for (list = g_value_get_boxed (glade_property_inline_value (property)); list; list = list->next) { GladeAccelInfo *accel = list->data; accel_node = glade_accel_write (accel, context, write_signal); glade_xml_node_append_child (node, accel_node); } }
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); } }