[gtk+/builder-details] Fixed GtkContainer to parse <packing> property text accumulatively.
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/builder-details] Fixed GtkContainer to parse <packing> property text accumulatively.
- Date: Wed, 26 Jan 2011 13:03:19 +0000 (UTC)
commit 0ee8c43f8ffe60bb3ee36335b6cc050dd1a50cfb
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Wed Jan 26 22:10:33 2011 +0900
Fixed GtkContainer to parse <packing> property text accumulatively.
gtk/gtkcontainer.c | 64 +++++++++++++++++++++++++++++++--------------------
1 files changed, 39 insertions(+), 25 deletions(-)
---
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index 4c7c44c..5bf6f4d 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -579,9 +579,10 @@ typedef struct {
GtkBuilder *builder;
GtkContainer *container;
GtkWidget *child;
+ GString *string;
gchar *child_prop_name;
gchar *context;
- gboolean translatable;
+ gboolean translatable;
} PackingPropertiesData;
static void
@@ -629,34 +630,46 @@ attributes_text_element (GMarkupParseContext *context,
GError **error)
{
PackingPropertiesData *parser_data = (PackingPropertiesData*)user_data;
- gchar* value;
- if (!parser_data->child_prop_name)
- return;
+ if (parser_data->child_prop_name)
+ g_string_append_len (parser_data->string, text, text_len);
+}
- if (parser_data->translatable && text_len)
- {
- const gchar* domain;
- domain = gtk_builder_get_translation_domain (parser_data->builder);
+static void
+attributes_end_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error)
+{
+ PackingPropertiesData *parser_data = (PackingPropertiesData*)user_data;
- value = _gtk_builder_parser_translate (domain,
- parser_data->context,
- text);
- }
- else
+ /* Append the translated strings */
+ if (parser_data->string->len)
{
- value = g_strdup (text);
+ if (parser_data->translatable)
+ {
+ gchar *translated;
+ const gchar* domain;
+
+ domain = gtk_builder_get_translation_domain (parser_data->builder);
+
+ translated = _gtk_builder_parser_translate (domain,
+ parser_data->context,
+ parser_data->string->str);
+ g_string_set_size (parser_data->string, 0);
+ g_string_append (parser_data->string, translated);
+ }
+
+ gtk_container_buildable_set_child_property (parser_data->container,
+ parser_data->builder,
+ parser_data->child,
+ parser_data->child_prop_name,
+ parser_data->string->str);
}
- gtk_container_buildable_set_child_property (parser_data->container,
- parser_data->builder,
- parser_data->child,
- parser_data->child_prop_name,
- value);
-
+ g_string_set_size (parser_data->string, 0);
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;
@@ -665,7 +678,7 @@ attributes_text_element (GMarkupParseContext *context,
static const GMarkupParser attributes_parser =
{
attributes_start_element,
- NULL,
+ attributes_end_element,
attributes_text_element,
};
@@ -686,6 +699,7 @@ gtk_container_buildable_custom_tag_start (GtkBuildable *buildable,
if (child && strcmp (tagname, "packing") == 0)
{
parser_data = g_slice_new0 (PackingPropertiesData);
+ parser_data->string = g_string_new ("");
parser_data->builder = builder;
parser_data->container = GTK_CONTAINER (buildable);
parser_data->child = GTK_WIDGET (child);
@@ -708,15 +722,15 @@ gtk_container_buildable_custom_tag_end (GtkBuildable *buildable,
{
if (strcmp (tagname, "packing") == 0)
{
- g_slice_free (PackingPropertiesData, (gpointer)data);
+ PackingPropertiesData *parser_data = (PackingPropertiesData*)data;
+ g_string_free (parser_data->string, TRUE);
+ g_slice_free (PackingPropertiesData, parser_data);
return;
-
}
if (parent_buildable_iface->custom_tag_end)
parent_buildable_iface->custom_tag_end (buildable, builder,
child, tagname, data);
-
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]