gtk+ r21855 - in trunk: . docs/reference docs/reference/gtk/tmpl gtk
- From: matthiasc svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r21855 - in trunk: . docs/reference docs/reference/gtk/tmpl gtk
- Date: Mon, 8 Dec 2008 03:57:16 +0000 (UTC)
Author: matthiasc
Date: Mon Dec 8 03:57:16 2008
New Revision: 21855
URL: http://svn.gnome.org/viewvc/gtk+?rev=21855&view=rev
Log:
* gtk/gtkbuilderparser.c: Make gtk_builder_get_translation_domain()
useful for subparsers.
* gtk/gtkcontainer.c: Make the child property parser support
translatable child properties.
Modified:
trunk/ChangeLog
trunk/docs/reference/ChangeLog
trunk/docs/reference/gtk/tmpl/gtkcontainer.sgml
trunk/gtk/gtkbuilderparser.c
trunk/gtk/gtkcontainer.c
Modified: trunk/docs/reference/gtk/tmpl/gtkcontainer.sgml
==============================================================================
--- trunk/docs/reference/gtk/tmpl/gtkcontainer.sgml (original)
+++ trunk/docs/reference/gtk/tmpl/gtkcontainer.sgml Mon Dec 8 03:57:16 2008
@@ -125,6 +125,11 @@
</object>
]]></programlisting>
</example>
+<para>
+Since 2.16, child properties can also be marked as translatable using
+the same "translatable", "comments" and "context" attributes that are used
+for regular properties.
+</para>
</refsect2>
<!-- ##### SECTION See_Also ##### -->
Modified: trunk/gtk/gtkbuilderparser.c
==============================================================================
--- trunk/gtk/gtkbuilderparser.c (original)
+++ trunk/gtk/gtkbuilderparser.c Mon Dec 8 03:57:16 2008
@@ -634,9 +634,24 @@
{
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 @@
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 @@
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);
}
Modified: trunk/gtk/gtkcontainer.c
==============================================================================
--- trunk/gtk/gtkcontainer.c (original)
+++ trunk/gtk/gtkcontainer.c Mon Dec 8 03:57:16 2008
@@ -31,6 +31,7 @@
#include "gtkcontainer.h"
#include "gtkbuildable.h"
+#include "gtkbuilderprivate.h"
#include "gtkprivate.h"
#include "gtkmain.h"
#include "gtkmarshalers.h"
@@ -361,6 +362,8 @@
GtkContainer *container;
GtkWidget *child;
gchar *child_prop_name;
+ gchar *context;
+ gboolean translatable
} PackingPropertiesData;
static void
@@ -379,6 +382,20 @@
for (i = 0; names[i]; i++)
if (strcmp (names[i], "name") == 0)
parser_data->child_prop_name = g_strdup (values[i]);
+ else if (strcmp (names[i], "translatable") == 0)
+ {
+ if (!_gtk_builder_boolean_from_string (values[1],
+ &parser_data->translatable,
+ error))
+ return;
+ }
+ else if (strcmp (names[i], "comments") == 0)
+ ; /* for translators */
+ else if (strcmp (names[i], "context") == 0)
+ parser_data->context = g_strdup (values[1]);
+ else
+ g_warning ("Unsupported attribute for GtkContainer Child "
+ "property: %s\n", names[i]);
}
else if (strcmp (element_name, "packing") == 0)
return;
@@ -394,18 +411,37 @@
GError **error)
{
PackingPropertiesData *parser_data = (PackingPropertiesData*)user_data;
+ const gchar* value;
if (!parser_data->child_prop_name)
return;
+
+ if (parser_data->translatable && text_len)
+ {
+ const gchar* domain;
+ domain = gtk_builder_get_translation_domain (parser_data->builder);
+
+ value = _gtk_builder_parser_translate (domain,
+ parser_data->context,
+ text);
+ }
+ else
+ {
+ value = g_strdup (text);
+ }
gtk_container_buildable_set_child_property (parser_data->container,
parser_data->builder,
parser_data->child,
parser_data->child_prop_name,
- text);
+ value);
g_free (parser_data->child_prop_name);
+ g_free (parser_data->context);
+ g_free (value);
parser_data->child_prop_name = NULL;
+ parser_data->context = NULL;
+ parser_data->translatable = FALSE;
}
static const GMarkupParser attributes_parser =
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]