diff --git a/ChangeLog b/ChangeLog index b52d43c4e0..789beea884 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-05-31 Kristian Rietveld + + 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. + 2008-05-30 Tor Lillqvist * modules/engines/ms-windows/msw_style.h 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; } - gtk_tooltip_set_markup (tooltip, str); + 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, 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; }