Add g_list_store_sort

GListStore already has a g_list_store_insert_sorted function,
which can be used to keep the list sorted according to a fixed
sort function. But if the sort function changes (as e.g. with
sort columns in a list UI), the entire list needs to be
resorted. In that case, you want g_list_store_sort().

https://bugzilla.gnome.org/show_bug.cgi?id=754152
This commit is contained in:
Matthias Clasen
2015-08-26 23:20:39 -04:00
parent 516adb99c0
commit e5734c37a6
3 changed files with 32 additions and 0 deletions

View File

@@ -4443,6 +4443,7 @@ g_list_store_append
g_list_store_remove
g_list_store_remove_all
g_list_store_splice
g_list_store_sort
<SUBSECTION Standard>
G_TYPE_LIST_STORE
<SUBSECTION Private>

View File

@@ -316,6 +316,32 @@ g_list_store_insert_sorted (GListStore *store,
return position;
}
/**
* g_list_store_sort:
* @store: a #GListStore
* @compare_func: (scope call): pairwise comparison function for sorting
* @user_data: (closure): user data for @compare_func
*
* Sort the items in @store according to @compare_func.
*
* Since: 2.46
*/
void
g_list_store_sort (GListStore *store,
GCompareDataFunc compare_func,
gpointer user_data)
{
gint n_items;
g_return_if_fail (G_IS_LIST_STORE (store));
g_return_val_if_fail (compare_func != NULL, 0);
g_sequence_sort (store->items, compare_func, user_data);
n_items = g_sequence_get_length (store->items);
g_list_store_items_changed (store, 0, n_items, n_items);
}
/**
* g_list_store_append:
* @store: a #GListStore

View File

@@ -49,6 +49,11 @@ guint g_list_store_insert_sorted (GListSt
GCompareDataFunc compare_func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_46
void g_list_store_sort (GListStore *store,
GCompareDataFunc compare_func,
gpointer user_data);
GLIB_AVAILABLE_IN_2_44
void g_list_store_append (GListStore *store,
gpointer item);