summaryrefslogtreecommitdiff
path: root/gtk/gtkcontainer.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-12-08 03:57:16 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-12-08 03:57:16 +0000
commit70675377c00c2f164feb6ec78912812bfa0aad40 (patch)
tree9f0331308d3426d0715ba46e4ed7ae800c4e3c94 /gtk/gtkcontainer.c
parent2afd463b2628e3c3e6184a17bccb60706d48ff87 (diff)
downloadgtk+-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/gtkcontainer.c')
-rw-r--r--gtk/gtkcontainer.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index 516773af01..0ee531828e 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -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 @@ typedef struct {
GtkContainer *container;
GtkWidget *child;
gchar *child_prop_name;
+ gchar *context;
+ gboolean translatable
} PackingPropertiesData;
static void
@@ -379,6 +382,20 @@ attributes_start_element (GMarkupParseContext *context,
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 @@ attributes_text_element (GMarkupParseContext *context,
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 =