Commit e7354bd3 authored by Tristan Van Berkom's avatar Tristan Van Berkom

Fixed GtkCellLayout to parse <cell-packing> property text accumulatively.

parent 5ebc6f4d
......@@ -693,6 +693,7 @@ typedef struct {
GtkBuilder *builder;
GtkCellLayout *cell_layout;
GtkCellRenderer *renderer;
GString *string;
gchar *cell_prop_name;
gchar *context;
gboolean translatable;
......@@ -743,53 +744,65 @@ cell_packing_text_element (GMarkupParseContext *context,
GError **error)
{
CellPackingSubParserData *parser_data = (CellPackingSubParserData*)user_data;
GtkCellArea *area;
gchar* value;
if (!parser_data->cell_prop_name)
return;
if (parser_data->cell_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
cell_packing_end_element (GMarkupParseContext *context,
const gchar *element_name,
gpointer user_data,
GError **error)
{
CellPackingSubParserData *parser_data = (CellPackingSubParserData*)user_data;
GtkCellArea *area;
value = _gtk_builder_parser_translate (domain,
parser_data->context,
text);
}
else
/* Append the translated strings */
if (parser_data->string->len)
{
value = g_strdup (text);
}
area = gtk_cell_layout_get_area (parser_data->cell_layout);
area = gtk_cell_layout_get_area (parser_data->cell_layout);
if (!area)
{
g_warning ("%s does not have an internal GtkCellArea class and cannot apply child cell properties",
g_type_name (G_OBJECT_TYPE (parser_data->cell_layout)));
return;
if (area)
{
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_cell_layout_buildable_set_cell_property (area,
parser_data->builder,
parser_data->renderer,
parser_data->cell_prop_name,
parser_data->string->str);
}
else
g_warning ("%s does not have an internal GtkCellArea class and cannot apply child cell properties",
g_type_name (G_OBJECT_TYPE (parser_data->cell_layout)));
}
gtk_cell_layout_buildable_set_cell_property (area,
parser_data->builder,
parser_data->renderer,
parser_data->cell_prop_name,
value);
g_string_set_size (parser_data->string, 0);
g_free (parser_data->cell_prop_name);
g_free (parser_data->context);
g_free (value);
parser_data->cell_prop_name = NULL;
parser_data->context = NULL;
parser_data->translatable = FALSE;
}
static const GMarkupParser cell_packing_parser =
{
cell_packing_start_element,
NULL,
cell_packing_end_element,
cell_packing_text_element,
};
......@@ -821,6 +834,7 @@ _gtk_cell_layout_buildable_custom_tag_start (GtkBuildable *buildable,
else if (strcmp (tagname, "cell-packing") == 0)
{
packing_data = g_slice_new0 (CellPackingSubParserData);
packing_data->string = g_string_new ("");
packing_data->builder = builder;
packing_data->cell_layout = GTK_CELL_LAYOUT (buildable);
packing_data->renderer = GTK_CELL_RENDERER (child);
......@@ -841,6 +855,7 @@ _gtk_cell_layout_buildable_custom_tag_end (GtkBuildable *buildable,
gpointer *data)
{
AttributesSubParserData *attr_data;
CellPackingSubParserData *packing_data;
if (strcmp (tagname, "attributes") == 0)
{
......@@ -851,7 +866,9 @@ _gtk_cell_layout_buildable_custom_tag_end (GtkBuildable *buildable,
}
else if (strcmp (tagname, "cell-packing") == 0)
{
g_slice_free (CellPackingSubParserData, (gpointer)data);
packing_data = (CellPackingSubParserData *)data;
g_string_free (packing_data->string, TRUE);
g_slice_free (CellPackingSubParserData, packing_data);
return TRUE;
}
return FALSE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment