summaryrefslogtreecommitdiff
path: root/gtk/gtktreestore.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-06-07 16:05:27 -0400
committerCosimo Cecchi <cosimoc@gnome.org>2012-06-07 16:47:11 -0400
commita24f7564b59a663e0208793fcfa53fa43a6e81da (patch)
treecdd194b5963b20e01490116c453796a6a98e3dd1 /gtk/gtktreestore.c
parente92e767246bae9c30db4649656bf1c90bd6be8b4 (diff)
downloadgtk+-a24f7564b59a663e0208793fcfa53fa43a6e81da.tar.gz
treestore: fix transformation of GValues on set
There are three bugs here: - we should check if the value type is transformable instead of being compatible, since that's all we care about in order to call g_value_transform() - the check is only meaningful in the direction passed-in-type->column-type and not viceversa - we should init the destination GValue to the column type before calling g_value_transform on it, or the destination type information will be missing and the method will fail Thanks to Jasper St. Pierre and Colin Walters for all the help in tracking this down. https://bugzilla.gnome.org/show_bug.cgi?id=677649
Diffstat (limited to 'gtk/gtktreestore.c')
-rw-r--r--gtk/gtktreestore.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c
index 773a2562d8..6271359fc4 100644
--- a/gtk/gtktreestore.c
+++ b/gtk/gtktreestore.c
@@ -853,8 +853,7 @@ gtk_tree_store_real_set_value (GtkTreeStore *tree_store,
if (! g_type_is_a (G_VALUE_TYPE (value), priv->column_headers[column]))
{
- if (! (g_value_type_compatible (G_VALUE_TYPE (value), priv->column_headers[column]) &&
- g_value_type_compatible (priv->column_headers[column], G_VALUE_TYPE (value))))
+ if (! (g_value_type_transformable (G_VALUE_TYPE (value), priv->column_headers[column])))
{
g_warning ("%s: Unable to convert from %s to %s\n",
G_STRLOC,
@@ -862,6 +861,8 @@ gtk_tree_store_real_set_value (GtkTreeStore *tree_store,
g_type_name (priv->column_headers[column]));
return retval;
}
+
+ g_value_init (&real_value, priv->column_headers[column]);
if (!g_value_transform (value, &real_value))
{
g_warning ("%s: Unable to make conversion from %s to %s\n",