diff options
author | Kristian Rietveld <kris@imendio.com> | 2008-05-30 22:59:13 +0000 |
---|---|---|
committer | Kristian Rietveld <kristian@src.gnome.org> | 2008-05-30 22:59:13 +0000 |
commit | f1405056f22493f6f320800be5bb141a91faa63a (patch) | |
tree | 6eecb562ef704c53cdaadc466d01530d7a40499f /gtk/gtktreeview.c | |
parent | 2ab7f3ddb34dfa94faf40aa9bbf7c453a8c7f5b9 (diff) | |
download | gtk+-f1405056f22493f6f320800be5bb141a91faa63a.tar.gz |
Bug 530146 - Setting non-string tooltip with
2008-05-31 Kristian Rietveld <kris@imendio.com>
Bug 530146 - Setting non-string tooltip with
gtk_tree_view_set_tooltip_column() segfaults
* gtk/gtktreeview.c (gtk_tree_view_set_tooltip_query_cb): use
gtk_tree_model_get_value() and explicitly transform the value to a
string before setting it as tooltip.
svn path=/trunk/; revision=20261
Diffstat (limited to 'gtk/gtktreeview.c')
-rw-r--r-- | gtk/gtktreeview.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 455a4fa3a7..6bebb8cf67 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -15514,7 +15514,8 @@ gtk_tree_view_set_tooltip_query_cb (GtkWidget *widget, GtkTooltip *tooltip, gpointer data) { - gchar *str; + GValue value = { 0, }; + GValue transformed = { 0, }; GtkTreeIter iter; GtkTreePath *path; GtkTreeModel *model; @@ -15526,19 +15527,34 @@ gtk_tree_view_set_tooltip_query_cb (GtkWidget *widget, &model, &path, &iter)) return FALSE; - gtk_tree_model_get (model, &iter, tree_view->priv->tooltip_column, &str, -1); + gtk_tree_model_get_value (model, &iter, + tree_view->priv->tooltip_column, &value); - if (!str) + g_value_init (&transformed, G_TYPE_STRING); + + if (!g_value_transform (&value, &transformed)) + { + g_value_unset (&value); + gtk_tree_path_free (path); + + return FALSE; + } + + g_value_unset (&value); + + if (!g_value_get_string (&transformed)) { + g_value_unset (&transformed); gtk_tree_path_free (path); + return FALSE; } - gtk_tooltip_set_markup (tooltip, str); + gtk_tooltip_set_markup (tooltip, g_value_get_string (&transformed)); gtk_tree_view_set_tooltip_row (tree_view, tooltip, path); gtk_tree_path_free (path); - g_free (str); + g_value_unset (&transformed); return TRUE; } |