diff options
Diffstat (limited to 'gtk/gtktreedatalist.c')
-rw-r--r-- | gtk/gtktreedatalist.c | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/gtk/gtktreedatalist.c b/gtk/gtktreedatalist.c index 9cbd26a7aa..02040fa4cb 100644 --- a/gtk/gtktreedatalist.c +++ b/gtk/gtktreedatalist.c @@ -462,7 +462,7 @@ _gtk_tree_data_list_header_new (gint n_columns, { GtkTreeDataSortHeader *header; - header = g_new (GtkTreeDataSortHeader, 1); + header = g_slice_new (GtkTreeDataSortHeader); retval = g_list_prepend (retval, header); header->sort_column_id = i; @@ -490,14 +490,14 @@ _gtk_tree_data_list_header_free (GList *list) d (header->data); } - g_free (header); + g_slice_free (GtkTreeDataSortHeader, header); } g_list_free (list); } GtkTreeDataSortHeader * -_gtk_tree_data_list_get_header (GList *header_list, - gint sort_column_id) +_gtk_tree_data_list_get_header (GList *header_list, + gint sort_column_id) { GtkTreeDataSortHeader *header = NULL; @@ -509,3 +509,50 @@ _gtk_tree_data_list_get_header (GList *header_list, } return NULL; } + + +GList * +_gtk_tree_data_list_set_header (GList *header_list, + gint sort_column_id, + GtkTreeIterCompareFunc func, + gpointer data, + GtkDestroyNotify destroy) +{ + GList *list = header_list; + GtkTreeDataSortHeader *header = NULL; + + for (; list; list = list->next) + { + header = (GtkTreeDataSortHeader*) list->data; + if (header->sort_column_id == sort_column_id) + break; + header = NULL; + + if (list->next == NULL) + break; + } + + if (header == NULL) + { + header = g_slice_new0 (GtkTreeDataSortHeader); + header->sort_column_id = sort_column_id; + if (list) + g_list_append (list, header); + else + header_list = g_list_append (header_list, header); + } + + if (header->destroy) + { + GtkDestroyNotify d = header->destroy; + + header->destroy = NULL; + d (header->data); + } + + header->func = func; + header->data = data; + header->destroy = destroy; + + return header_list; +} |