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
This commit is contained in:
Kristian Rietveld 2008-05-30 22:59:13 +00:00 committed by Kristian Rietveld
parent 2ab7f3ddb3
commit f1405056f2
2 changed files with 30 additions and 5 deletions

View File

@ -1,3 +1,12 @@
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.
2008-05-30 Tor Lillqvist <tml@novell.com>
* modules/engines/ms-windows/msw_style.h

View File

@ -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;
}