forked from osmocom/wireshark
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:
parent
8adf270b5e
commit
90a5f3ea8b
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue