[gtk+] Fix string allocation handling with GtkBuilder translations
- From: Kalev Lember <klember src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Fix string allocation handling with GtkBuilder translations
- Date: Sat, 8 Jun 2013 08:55:27 +0000 (UTC)
commit a37450110b74605041318a76dac51838953d406d
Author: Kalev Lember <kalevlember gmail com>
Date: Fri Jun 7 14:12:14 2013 +0200
Fix string allocation handling with GtkBuilder translations
Use g_string_assign to avoid issues with assigning GString's internal
buffer back to the same string. This can happen when no translations are
available and _gtk_builder_parser_translate returns back the same
pointer that was passed in.
This fixes a regression from commit e9f182e37a7f6e2dc339054841a3c9f930f
that caused GtkComboBoxText <items> from GtkBuilder to show up empty if
no translations are available.
https://bugzilla.gnome.org/show_bug.cgi?id=700629
gtk/gtkbuilderparser.c | 16 ++++++++--------
gtk/gtkcelllayout.c | 3 +--
gtk/gtkcomboboxtext.c | 3 +--
gtk/gtkcontainer.c | 12 +++++-------
4 files changed, 15 insertions(+), 19 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index 6e42972..11e04cb 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -1128,16 +1128,16 @@ end_element (GMarkupParseContext *context,
if (prop_info->translatable && prop_info->text->len)
{
- prop_info->data = g_strdup (_gtk_builder_parser_translate (data->domain,
- prop_info->context,
- prop_info->text->str));
- g_string_free (prop_info->text, TRUE);
- }
- else
- {
- prop_info->data = g_string_free (prop_info->text, FALSE);
+ const gchar *translated;
+
+ translated = _gtk_builder_parser_translate (data->domain,
+ prop_info->context,
+ prop_info->text->str);
+ g_string_assign (prop_info->text, translated);
}
+ prop_info->data = g_string_free (prop_info->text, FALSE);
+
object_info->properties =
g_slist_prepend (object_info->properties, prop_info);
}
diff --git a/gtk/gtkcelllayout.c b/gtk/gtkcelllayout.c
index 4f6425d..a6d33aa 100644
--- a/gtk/gtkcelllayout.c
+++ b/gtk/gtkcelllayout.c
@@ -820,8 +820,7 @@ cell_packing_end_element (GMarkupParseContext *context,
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);
+ g_string_assign (parser_data->string, translated);
}
if (parser_data->cell_prop_name)
diff --git a/gtk/gtkcomboboxtext.c b/gtk/gtkcomboboxtext.c
index a81c844..0de9124 100644
--- a/gtk/gtkcomboboxtext.c
+++ b/gtk/gtkcomboboxtext.c
@@ -240,8 +240,7 @@ item_end_element (GMarkupParseContext *context,
translated = _gtk_builder_parser_translate (data->domain,
data->context,
data->string->str);
- g_string_set_size (data->string, 0);
- g_string_append (data->string, translated);
+ g_string_assign (data->string, translated);
}
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (data->object), data->id, data->string->str);
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index a30420d..636a02e 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -667,17 +667,15 @@ attributes_end_element (GMarkupParseContext *context,
/* translate the string */
if (parser_data->string->len && parser_data->translatable)
{
- gchar *translated;
+ const gchar *translated;
const gchar *domain;
domain = gtk_builder_get_translation_domain (parser_data->builder);
- translated = g_strdup (_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);
- g_free (translated);
+ translated = _gtk_builder_parser_translate (domain,
+ parser_data->context,
+ parser_data->string->str);
+ g_string_assign (parser_data->string, translated);
}
if (parser_data->child_prop_name)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]