diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index 039b20cd4..6dbe76719 100644 --- a/docs/reference/gio/gio-sections.txt +++ b/docs/reference/gio/gio-sections.txt @@ -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 G_TYPE_LIST_STORE diff --git a/gio/gliststore.c b/gio/gliststore.c index 5e5f3e3a6..dff3958df 100644 --- a/gio/gliststore.c +++ b/gio/gliststore.c @@ -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 diff --git a/gio/gliststore.h b/gio/gliststore.h index 88ce94135..cc8011e6d 100644 --- a/gio/gliststore.h +++ b/gio/gliststore.h @@ -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);