mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-21 08:28:53 +02:00
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:
@@ -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>
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user