From yami via bug 3508:

Fix a performance issue in filter autocomplete by disable sorting before
calling build_autocompletion_list() in filter_autocomplete_handle_backspace(),
and enable it after building list.

svn path=/trunk/; revision=28687
This commit is contained in:
Stig Bjørlykke 2009-06-10 18:13:07 +00:00
parent 8adf270b5e
commit 90a5f3ea8b
1 changed files with 22 additions and 4 deletions

View File

@ -682,6 +682,18 @@ build_autocompletion_list(GtkWidget *filter_te, GtkWidget *treeview, GtkWidget *
return TRUE;
}
static void
filter_autocomplete_disable_sorting(GtkTreeModel *model)
{
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
}
static void
filter_autocomplete_enable_sorting(GtkTreeModel *model)
{
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), 0, GTK_SORT_ASCENDING);
}
static GtkWidget *
filter_autocomplete_new(GtkWidget *filter_te, const gchar *protocol_name, gboolean protocols_only, gboolean *stop_propagation)
{
@ -690,7 +702,6 @@ filter_autocomplete_new(GtkWidget *filter_te, const gchar *protocol_name, gboole
GtkWidget *filter_sc;
gint x_pos, y_pos;
GtkTreeModel *model;
GtkSortType order;
GtkTreeSelection *selection;
GtkRequisition requisition;
GtkWidget *w_toplevel;
@ -722,9 +733,8 @@ filter_autocomplete_new(GtkWidget *filter_te, const gchar *protocol_name, gboole
/* Sort treeview */
model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
order = GTK_SORT_ASCENDING;
if(model)
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), 0, order);
filter_autocomplete_enable_sorting(model);
gtk_container_add (GTK_CONTAINER (filter_sc), treeview);
@ -754,6 +764,7 @@ filter_autocomplete_new(GtkWidget *filter_te, const gchar *protocol_name, gboole
static void
filter_autocomplete_handle_backspace(GtkWidget *filter_te, GtkWidget *list, GtkWidget *popup_win, gchar *prefix, GtkWidget *main_win)
{
GtkTreeModel *model;
GtkListStore *store;
GtkRequisition requisition;
size_t prefix_len;
@ -773,9 +784,13 @@ filter_autocomplete_handle_backspace(GtkWidget *filter_te, GtkWidget *list, GtkW
}
/* Empty list */
store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
store = GTK_LIST_STORE(model);
gtk_list_store_clear(store);
/* Disable sorting */
filter_autocomplete_disable_sorting(model);
/* Build new list */
if (!build_autocompletion_list(filter_te, list, popup_win, prefix, protocols_only, NULL)) {
gtk_widget_destroy(popup_win);
@ -783,6 +798,9 @@ filter_autocomplete_handle_backspace(GtkWidget *filter_te, GtkWidget *list, GtkW
return;
}
/* Enable sorting */
filter_autocomplete_enable_sorting(model);
gtk_widget_size_request(list, &requisition);
gtk_widget_set_size_request(popup_win, popup_win->allocation.width, (requisition.height<200? requisition.height+8:200));