Stop being stupid and emitting the signal every time.

Wed Sep 26 19:48:01 2001  Jonathan Blandford  <jrb@redhat.com>

	* gtk/gtktreestore.c (gtk_tree_store_set_valist): Stop being
	stupid and emitting the signal every time.

	* gtk/gtkliststore.c (gtk_list_store_set_valist): ditto
This commit is contained in:
Jonathan Blandford
2001-09-27 00:09:41 +00:00
committed by Jonathan Blandford
parent b1fa175336
commit 4b6bc02f66
32 changed files with 1466 additions and 179 deletions

View File

@ -688,23 +688,13 @@ gtk_tree_store_iter_parent (GtkTreeModel *tree_model,
return FALSE;
}
/**
* gtk_tree_store_set_value:
* @tree_store: a #GtkTreeStore
* @iter: A valid #GtkTreeIter for the row being modified
* @column: column number to modify
* @value: new value for the cell
*
* Sets the data in the cell specified by @iter and @column.
* The type of @value must be convertible to the type of the
* column.
*
**/
void
gtk_tree_store_set_value (GtkTreeStore *tree_store,
GtkTreeIter *iter,
gint column,
GValue *value)
/* Does not emit a signal */
gboolean
gtk_tree_store_real_set_value (GtkTreeStore *tree_store,
GtkTreeIter *iter,
gint column,
GValue *value)
{
GtkTreeDataList *list;
GtkTreeDataList *prev;
@ -712,11 +702,7 @@ gtk_tree_store_set_value (GtkTreeStore *tree_store,
GValue real_value = {0, };
gboolean converted = FALSE;
gint orig_column = column;
g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
g_return_if_fail (VALID_ITER (iter, tree_store));
g_return_if_fail (column >= 0 && column < tree_store->n_columns);
g_return_if_fail (G_IS_VALUE (value));
gboolean retval = FALSE;
if (! g_type_is_a (G_VALUE_TYPE (value), tree_store->column_headers[column]))
{
@ -727,7 +713,7 @@ gtk_tree_store_set_value (GtkTreeStore *tree_store,
G_STRLOC,
g_type_name (G_VALUE_TYPE (value)),
g_type_name (tree_store->column_headers[column]));
return;
return retval;
}
if (!g_value_transform (value, &real_value))
{
@ -736,7 +722,7 @@ gtk_tree_store_set_value (GtkTreeStore *tree_store,
g_type_name (G_VALUE_TYPE (value)),
g_type_name (tree_store->column_headers[column]));
g_value_unset (&real_value);
return;
return retval;
}
converted = TRUE;
}
@ -753,11 +739,11 @@ gtk_tree_store_set_value (GtkTreeStore *tree_store,
_gtk_tree_data_list_value_to_node (list, &real_value);
else
_gtk_tree_data_list_value_to_node (list, value);
gtk_tree_model_row_changed (GTK_TREE_MODEL (tree_store), path, iter);
retval = TRUE;
gtk_tree_path_free (path);
if (converted)
g_value_unset (&real_value);
return;
return retval;
}
column--;
@ -787,13 +773,48 @@ gtk_tree_store_set_value (GtkTreeStore *tree_store,
_gtk_tree_data_list_value_to_node (list, &real_value);
else
_gtk_tree_data_list_value_to_node (list, value);
gtk_tree_model_row_changed (GTK_TREE_MODEL (tree_store), path, iter);
gtk_tree_path_free (path);
if (converted)
g_value_unset (&real_value);
if (GTK_TREE_STORE_IS_SORTED (tree_store))
gtk_tree_store_sort_iter_changed (tree_store, iter, orig_column);
return retval;
}
/**
* gtk_tree_store_set_value:
* @tree_store: a #GtkTreeStore
* @iter: A valid #GtkTreeIter for the row being modified
* @column: column number to modify
* @value: new value for the cell
*
* Sets the data in the cell specified by @iter and @column.
* The type of @value must be convertible to the type of the
* column.
*
**/
void
gtk_tree_store_set_value (GtkTreeStore *tree_store,
GtkTreeIter *iter,
gint column,
GValue *value)
{
g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
g_return_if_fail (VALID_ITER (iter, tree_store));
g_return_if_fail (column >= 0 && column < tree_store->n_columns);
g_return_if_fail (G_IS_VALUE (value));
if (gtk_tree_store_real_set_value (tree_store, iter, column, value))
{
GtkTreePath *path;
path = gtk_tree_model_get_path (GTK_TREE_MODEL (tree_store), iter);
gtk_tree_model_row_changed (GTK_TREE_MODEL (tree_store), path, iter);
gtk_tree_path_free (path);
}
}
/**
@ -812,6 +833,7 @@ gtk_tree_store_set_valist (GtkTreeStore *tree_store,
va_list var_args)
{
gint column;
gboolean emit_signal = FALSE;
g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
g_return_if_fail (VALID_ITER (iter, tree_store));
@ -842,16 +864,23 @@ gtk_tree_store_set_valist (GtkTreeStore *tree_store,
break;
}
/* FIXME: instead of calling this n times, refactor with above */
gtk_tree_store_set_value (tree_store,
iter,
column,
&value);
emit_signal = gtk_tree_store_real_set_value (tree_store,
iter,
column,
&value) || emit_signal;
g_value_unset (&value);
column = va_arg (var_args, gint);
}
if (emit_signal)
{
GtkTreePath *path;
path = gtk_tree_model_get_path (GTK_TREE_MODEL (tree_store), iter);
gtk_tree_model_row_changed (GTK_TREE_MODEL (tree_store), path, iter);
gtk_tree_path_free (path);
}
}
/**