diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2008-12-08 03:57:16 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2008-12-08 03:57:16 +0000 |
commit | 70675377c00c2f164feb6ec78912812bfa0aad40 (patch) | |
tree | 9f0331308d3426d0715ba46e4ed7ae800c4e3c94 /gtk/gtkbuilderparser.c | |
parent | 2afd463b2628e3c3e6184a17bccb60706d48ff87 (diff) | |
download | gtk+-70675377c00c2f164feb6ec78912812bfa0aad40.tar.gz |
Make gtk_builder_get_translation_domain() useful for subparsers.
* gtk/gtkbuilderparser.c: Make gtk_builder_get_translation_domain()
useful for subparsers.
* gtk/gtkcontainer.c: Make the child property parser support
translatable child properties.
svn path=/trunk/; revision=21855
Diffstat (limited to 'gtk/gtkbuilderparser.c')
-rw-r--r-- | gtk/gtkbuilderparser.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index d1057811a3..f4cb947a80 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -634,9 +634,24 @@ parse_interface (ParserData *data, { if (strcmp (names[i], "domain") == 0) { - g_free (data->domain); - data->domain = g_strdup (values[i]); - break; + + if (data->domain) + { + if (strcmp (data->domain, values[i]) == 0) + continue; + else + g_warning ("%s: interface domain '%s' overrides " + "programically set domain '%s'", + data->filename, + values[i], + data->domain + ); + + g_free (data->domain); + } + + data->domain = g_strdup (values[i]); + gtk_builder_set_translation_domain (data->builder, data->domain); } else error_invalid_attribute (data, "interface", names[i], error); @@ -1116,13 +1131,21 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder, gchar **requested_objs, GError **error) { + const gchar* domain; ParserData *data; GSList *l; + /* Store the original domain so that interface domain attribute can be + * applied for the builder and the original domain can be restored after + * parsing has finished. This allows subparsers to translate elements with + * gtk_builder_get_translation_domain() without breaking the ABI or API + */ + domain = gtk_builder_get_translation_domain (builder); + data = g_new0 (ParserData, 1); data->builder = builder; data->filename = filename; - data->domain = g_strdup (gtk_builder_get_translation_domain (builder)); + data->domain = g_strdup (domain); data->requested_objects = NULL; if (requested_objs) @@ -1184,4 +1207,7 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder, g_free (data->domain); g_markup_parse_context_free (data->ctx); g_free (data); + + /* restore the original domain */ + gtk_builder_set_translation_domain (builder, domain); } |