A trick for a faster treeview, step 1. Patch to short circuit
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org> A trick for a faster treeview, step 1. Patch to short circuit _build_tree(), inspired by Jonathan (#80868). * gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in flags by default, (gtk_tree_view_build_tree): don't even try to recurse when the model says that it is a list, remove flag unsetter, (gtk_tree_view_set_model): change flag setting logic. * gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags): propagate whether or not the child model has _IS_LIST set. * gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags): ditto.
This commit is contained in:
parent
cf98c97946
commit
5f3cde77ba
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
A trick for a faster treeview, step 1. Patch to short circuit
|
||||||
|
_build_tree(), inspired by Jonathan (#80868).
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in
|
||||||
|
flags by default,
|
||||||
|
(gtk_tree_view_build_tree): don't even try to recurse when the
|
||||||
|
model says that it is a list, remove flag unsetter,
|
||||||
|
(gtk_tree_view_set_model): change flag setting logic.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags):
|
||||||
|
propagate whether or not the child model has _IS_LIST set.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
A trick for a faster treeview, step 1. Patch to short circuit
|
||||||
|
_build_tree(), inspired by Jonathan (#80868).
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in
|
||||||
|
flags by default,
|
||||||
|
(gtk_tree_view_build_tree): don't even try to recurse when the
|
||||||
|
model says that it is a list, remove flag unsetter,
|
||||||
|
(gtk_tree_view_set_model): change flag setting logic.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags):
|
||||||
|
propagate whether or not the child model has _IS_LIST set.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
A trick for a faster treeview, step 1. Patch to short circuit
|
||||||
|
_build_tree(), inspired by Jonathan (#80868).
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in
|
||||||
|
flags by default,
|
||||||
|
(gtk_tree_view_build_tree): don't even try to recurse when the
|
||||||
|
model says that it is a list, remove flag unsetter,
|
||||||
|
(gtk_tree_view_set_model): change flag setting logic.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags):
|
||||||
|
propagate whether or not the child model has _IS_LIST set.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
A trick for a faster treeview, step 1. Patch to short circuit
|
||||||
|
_build_tree(), inspired by Jonathan (#80868).
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in
|
||||||
|
flags by default,
|
||||||
|
(gtk_tree_view_build_tree): don't even try to recurse when the
|
||||||
|
model says that it is a list, remove flag unsetter,
|
||||||
|
(gtk_tree_view_set_model): change flag setting logic.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags):
|
||||||
|
propagate whether or not the child model has _IS_LIST set.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
||||||
|
@ -1,3 +1,20 @@
|
|||||||
|
Sat Dec 13 16:13:27 2003 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
A trick for a faster treeview, step 1. Patch to short circuit
|
||||||
|
_build_tree(), inspired by Jonathan (#80868).
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init): don't put _IS_LIST in
|
||||||
|
flags by default,
|
||||||
|
(gtk_tree_view_build_tree): don't even try to recurse when the
|
||||||
|
model says that it is a list, remove flag unsetter,
|
||||||
|
(gtk_tree_view_set_model): change flag setting logic.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_get_flags):
|
||||||
|
propagate whether or not the child model has _IS_LIST set.
|
||||||
|
|
||||||
|
* gtk/gtktreemodelfilter.c (gtk_tree_model_filter_get_flags):
|
||||||
|
ditto.
|
||||||
|
|
||||||
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
Sat Dec 13 02:33:17 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
* gtk/gtkrange.c (gtk_range_scroll): Undo the last change,
|
||||||
|
@ -1752,7 +1752,15 @@ gtk_tree_model_filter_rows_reordered (GtkTreeModel *c_model,
|
|||||||
static guint
|
static guint
|
||||||
gtk_tree_model_filter_get_flags (GtkTreeModel *model)
|
gtk_tree_model_filter_get_flags (GtkTreeModel *model)
|
||||||
{
|
{
|
||||||
|
GtkTreeModelFlags flags;
|
||||||
|
|
||||||
g_return_val_if_fail (GTK_IS_TREE_MODEL_FILTER (model), 0);
|
g_return_val_if_fail (GTK_IS_TREE_MODEL_FILTER (model), 0);
|
||||||
|
g_return_val_if_fail (GTK_TREE_MODEL_FILTER (model)->priv->child_model != NULL, 0);
|
||||||
|
|
||||||
|
flags = gtk_tree_model_get_flags (GTK_TREE_MODEL_FILTER (model)->priv->child_model);
|
||||||
|
|
||||||
|
if ((flags & GTK_TREE_MODEL_LIST_ONLY) == GTK_TREE_MODEL_LIST_ONLY)
|
||||||
|
return GTK_TREE_MODEL_LIST_ONLY;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -899,7 +899,15 @@ gtk_tree_model_sort_rows_reordered (GtkTreeModel *s_model,
|
|||||||
static GtkTreeModelFlags
|
static GtkTreeModelFlags
|
||||||
gtk_tree_model_sort_get_flags (GtkTreeModel *tree_model)
|
gtk_tree_model_sort_get_flags (GtkTreeModel *tree_model)
|
||||||
{
|
{
|
||||||
|
GtkTreeModelFlags flags;
|
||||||
|
|
||||||
g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model), 0);
|
g_return_val_if_fail (GTK_IS_TREE_MODEL_SORT (tree_model), 0);
|
||||||
|
g_return_val_if_fail (GTK_TREE_MODEL_SORT (tree_model)->child_model != NULL, 0);
|
||||||
|
|
||||||
|
flags = gtk_tree_model_get_flags (GTK_TREE_MODEL_SORT (tree_model)->child_model);
|
||||||
|
|
||||||
|
if ((flags & GTK_TREE_MODEL_LIST_ONLY) == GTK_TREE_MODEL_LIST_ONLY)
|
||||||
|
return GTK_TREE_MODEL_LIST_ONLY;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1013,7 +1013,9 @@ gtk_tree_view_init (GtkTreeView *tree_view)
|
|||||||
|
|
||||||
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
|
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
|
||||||
|
|
||||||
tree_view->priv->flags = GTK_TREE_VIEW_IS_LIST | GTK_TREE_VIEW_SHOW_EXPANDERS | GTK_TREE_VIEW_DRAW_KEYFOCUS | GTK_TREE_VIEW_HEADERS_VISIBLE;
|
tree_view->priv->flags = GTK_TREE_VIEW_SHOW_EXPANDERS
|
||||||
|
| GTK_TREE_VIEW_DRAW_KEYFOCUS
|
||||||
|
| GTK_TREE_VIEW_HEADERS_VISIBLE;
|
||||||
|
|
||||||
/* We need some padding */
|
/* We need some padding */
|
||||||
tree_view->priv->dy = 0;
|
tree_view->priv->dy = 0;
|
||||||
@ -6912,11 +6914,16 @@ gtk_tree_view_build_tree (GtkTreeView *tree_view,
|
|||||||
gboolean recurse)
|
gboolean recurse)
|
||||||
{
|
{
|
||||||
GtkRBNode *temp = NULL;
|
GtkRBNode *temp = NULL;
|
||||||
|
gboolean is_list = GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
gtk_tree_model_ref_node (tree_view->priv->model, iter);
|
gtk_tree_model_ref_node (tree_view->priv->model, iter);
|
||||||
temp = _gtk_rbtree_insert_after (tree, temp, 0, FALSE);
|
temp = _gtk_rbtree_insert_after (tree, temp, 0, FALSE);
|
||||||
|
|
||||||
|
if (is_list)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (recurse)
|
if (recurse)
|
||||||
{
|
{
|
||||||
GtkTreeIter child;
|
GtkTreeIter child;
|
||||||
@ -6933,7 +6940,6 @@ gtk_tree_view_build_tree (GtkTreeView *tree_view,
|
|||||||
{
|
{
|
||||||
if ((temp->flags>K_RBNODE_IS_PARENT) != GTK_RBNODE_IS_PARENT)
|
if ((temp->flags>K_RBNODE_IS_PARENT) != GTK_RBNODE_IS_PARENT)
|
||||||
temp->flags ^= GTK_RBNODE_IS_PARENT;
|
temp->flags ^= GTK_RBNODE_IS_PARENT;
|
||||||
GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (gtk_tree_model_iter_next (tree_view->priv->model, iter));
|
while (gtk_tree_model_iter_next (tree_view->priv->model, iter));
|
||||||
@ -8433,7 +8439,6 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
|
|||||||
g_object_unref (tree_view->priv->model);
|
g_object_unref (tree_view->priv->model);
|
||||||
|
|
||||||
tree_view->priv->search_column = -1;
|
tree_view->priv->search_column = -1;
|
||||||
GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
|
|
||||||
tree_view->priv->fixed_height_check = 0;
|
tree_view->priv->fixed_height_check = 0;
|
||||||
tree_view->priv->dy = tree_view->priv->top_row_dy = 0;
|
tree_view->priv->dy = tree_view->priv->top_row_dy = 0;
|
||||||
}
|
}
|
||||||
@ -8446,6 +8451,7 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
|
|||||||
gint i;
|
gint i;
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
GtkTreeModelFlags flags;
|
||||||
|
|
||||||
if (tree_view->priv->search_column == -1)
|
if (tree_view->priv->search_column == -1)
|
||||||
{
|
{
|
||||||
@ -8483,6 +8489,12 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
|
|||||||
G_CALLBACK (gtk_tree_view_rows_reordered),
|
G_CALLBACK (gtk_tree_view_rows_reordered),
|
||||||
tree_view);
|
tree_view);
|
||||||
|
|
||||||
|
flags = gtk_tree_model_get_flags (tree_view->priv->model);
|
||||||
|
if ((flags & GTK_TREE_MODEL_LIST_ONLY) == GTK_TREE_MODEL_LIST_ONLY)
|
||||||
|
GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
|
||||||
|
else
|
||||||
|
GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
|
||||||
|
|
||||||
path = gtk_tree_path_new_first ();
|
path = gtk_tree_path_new_first ();
|
||||||
if (gtk_tree_model_get_iter (tree_view->priv->model, &iter, path))
|
if (gtk_tree_model_get_iter (tree_view->priv->model, &iter, path))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user