handle default sort feature
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com> * gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func): handle default sort feature * gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func): new function to handle default sort. (gtk_tree_sortable_has_default_sort_func): check if default sort is set. * gtk/gtkliststore.c (gtk_list_store_set_default_sort_func): handle default sort feature
This commit is contained in:
parent
8249e6275a
commit
43405a3d77
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
Mon Sep 3 18:03:56 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtktreestore.c (gtk_tree_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
|
* gtk/gtktreesortable.c (gtk_tree_sortable_set_default_sort_func):
|
||||||
|
new function to handle default sort.
|
||||||
|
(gtk_tree_sortable_has_default_sort_func): check if default sort
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* gtk/gtkliststore.c (gtk_list_store_set_default_sort_func):
|
||||||
|
handle default sort feature
|
||||||
|
|
||||||
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
Sun Sep 2 20:32:36 2001 Jonathan Blandford <jrb@redhat.com>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
* gtk/gtktreeview.c (gtk_tree_view_scroll_to_cell): patch from
|
||||||
|
@ -104,6 +104,12 @@ static void gtk_list_store_set_sort_func (GtkTreeSortable *sorta
|
|||||||
GtkTreeIterCompareFunc func,
|
GtkTreeIterCompareFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy);
|
GtkDestroyNotify destroy);
|
||||||
|
static void gtk_list_store_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy);
|
||||||
|
static gboolean gtk_list_store_has_default_sort_func (GtkTreeSortable *sortable);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -228,6 +234,8 @@ gtk_list_store_sortable_init (GtkTreeSortableIface *iface)
|
|||||||
iface->get_sort_column_id = gtk_list_store_get_sort_column_id;
|
iface->get_sort_column_id = gtk_list_store_get_sort_column_id;
|
||||||
iface->set_sort_column_id = gtk_list_store_set_sort_column_id;
|
iface->set_sort_column_id = gtk_list_store_set_sort_column_id;
|
||||||
iface->set_sort_func = gtk_list_store_set_sort_func;
|
iface->set_sort_func = gtk_list_store_set_sort_func;
|
||||||
|
iface->set_default_sort_func = gtk_list_store_set_default_sort_func;
|
||||||
|
iface->has_default_sort_func = gtk_list_store_has_default_sort_func;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1366,19 +1374,34 @@ gtk_list_store_compare_func (gconstpointer a,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkListStore *list_store = user_data;
|
GtkListStore *list_store = user_data;
|
||||||
GtkTreeDataSortHeader *header = NULL;
|
|
||||||
GSList *el_a; /* Los Angeles? */
|
GSList *el_a; /* Los Angeles? */
|
||||||
GSList *el_b;
|
GSList *el_b;
|
||||||
GtkTreeIter iter_a;
|
GtkTreeIter iter_a;
|
||||||
GtkTreeIter iter_b;
|
GtkTreeIter iter_b;
|
||||||
gint retval;
|
gint retval;
|
||||||
|
GtkTreeIterCompareFunc func;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
|
|
||||||
|
if (list_store->sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header;
|
||||||
|
|
||||||
header = _gtk_tree_data_list_get_header (list_store->sort_list,
|
header = _gtk_tree_data_list_get_header (list_store->sort_list,
|
||||||
list_store->sort_column_id);
|
list_store->sort_column_id);
|
||||||
|
|
||||||
g_return_val_if_fail (header != NULL, 0);
|
g_return_val_if_fail (header != NULL, 0);
|
||||||
g_return_val_if_fail (header->func != NULL, 0);
|
g_return_val_if_fail (header->func != NULL, 0);
|
||||||
|
|
||||||
|
func = header->func;
|
||||||
|
data = header->data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (list_store->default_sort_func != NULL, 0);
|
||||||
|
func = list_store->default_sort_func;
|
||||||
|
data = list_store->default_sort_data;
|
||||||
|
}
|
||||||
|
|
||||||
el_a = ((SortTuple *) a)->el;
|
el_a = ((SortTuple *) a)->el;
|
||||||
el_b = ((SortTuple *) b)->el;
|
el_b = ((SortTuple *) b)->el;
|
||||||
|
|
||||||
@ -1387,9 +1410,7 @@ gtk_list_store_compare_func (gconstpointer a,
|
|||||||
iter_b.stamp = list_store->stamp;
|
iter_b.stamp = list_store->stamp;
|
||||||
iter_b.user_data = el_b;
|
iter_b.user_data = el_b;
|
||||||
|
|
||||||
retval = (* header->func) (GTK_TREE_MODEL (list_store),
|
retval = (* func) (GTK_TREE_MODEL (list_store), &iter_a, &iter_b, data);
|
||||||
&iter_a, &iter_b,
|
|
||||||
header->data);
|
|
||||||
|
|
||||||
if (list_store->order == GTK_SORT_DESCENDING)
|
if (list_store->order == GTK_SORT_DESCENDING)
|
||||||
{
|
{
|
||||||
@ -1404,7 +1425,6 @@ gtk_list_store_compare_func (gconstpointer a,
|
|||||||
static void
|
static void
|
||||||
gtk_list_store_sort (GtkListStore *list_store)
|
gtk_list_store_sort (GtkListStore *list_store)
|
||||||
{
|
{
|
||||||
GtkTreeDataSortHeader *header = NULL;
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GArray *sort_array;
|
GArray *sort_array;
|
||||||
gint i;
|
gint i;
|
||||||
@ -1417,12 +1437,6 @@ gtk_list_store_sort (GtkListStore *list_store)
|
|||||||
|
|
||||||
g_assert (GTK_LIST_STORE_IS_SORTED (list_store));
|
g_assert (GTK_LIST_STORE_IS_SORTED (list_store));
|
||||||
|
|
||||||
header = _gtk_tree_data_list_get_header (list_store->sort_list, list_store->sort_column_id);
|
|
||||||
|
|
||||||
/* We want to make sure that we have a function */
|
|
||||||
g_return_if_fail (header != NULL);
|
|
||||||
g_return_if_fail (header->func != NULL);
|
|
||||||
|
|
||||||
list = G_SLIST (list_store->root);
|
list = G_SLIST (list_store->root);
|
||||||
|
|
||||||
sort_array = g_array_sized_new (FALSE, FALSE,
|
sort_array = g_array_sized_new (FALSE, FALSE,
|
||||||
@ -1471,7 +1485,6 @@ gtk_list_store_sort_iter_changed (GtkListStore *list_store,
|
|||||||
gint column)
|
gint column)
|
||||||
|
|
||||||
{
|
{
|
||||||
GtkTreeDataSortHeader *header;
|
|
||||||
GSList *prev = NULL;
|
GSList *prev = NULL;
|
||||||
GSList *next = NULL;
|
GSList *next = NULL;
|
||||||
GSList *list = G_SLIST (list_store->root);
|
GSList *list = G_SLIST (list_store->root);
|
||||||
@ -1483,18 +1496,33 @@ gtk_list_store_sort_iter_changed (GtkListStore *list_store,
|
|||||||
gint old_location;
|
gint old_location;
|
||||||
gint new_location;
|
gint new_location;
|
||||||
gint *new_order;
|
gint *new_order;
|
||||||
|
GtkTreeIterCompareFunc func;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
if (list_store->length < 2)
|
if (list_store->length < 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tmp_iter.stamp = list_store->stamp;
|
tmp_iter.stamp = list_store->stamp;
|
||||||
|
|
||||||
|
if (list_store->sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header;
|
||||||
header = _gtk_tree_data_list_get_header (list_store->sort_list,
|
header = _gtk_tree_data_list_get_header (list_store->sort_list,
|
||||||
list_store->sort_column_id);
|
list_store->sort_column_id);
|
||||||
g_return_if_fail (header != NULL);
|
g_return_if_fail (header != NULL);
|
||||||
g_return_if_fail (header->func != NULL);
|
g_return_if_fail (header->func != NULL);
|
||||||
|
func = header->func;
|
||||||
|
data = header->data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_if_fail (list_store->default_sort_func != NULL);
|
||||||
|
func = list_store->default_sort_func;
|
||||||
|
data = list_store->default_sort_data;
|
||||||
|
}
|
||||||
|
|
||||||
/* If it's the built in function, we don't sort. */
|
/* If it's the built in function, we don't sort. */
|
||||||
if (header->func == gtk_tree_data_list_compare_func &&
|
if (func == gtk_tree_data_list_compare_func &&
|
||||||
list_store->sort_column_id != column)
|
list_store->sort_column_id != column)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1516,17 +1544,13 @@ gtk_list_store_sort_iter_changed (GtkListStore *list_store,
|
|||||||
if (prev != NULL)
|
if (prev != NULL)
|
||||||
{
|
{
|
||||||
tmp_iter.user_data = prev;
|
tmp_iter.user_data = prev;
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (list_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter,
|
|
||||||
header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (next != NULL)
|
if (next != NULL)
|
||||||
{
|
{
|
||||||
tmp_iter.user_data = next;
|
tmp_iter.user_data = next;
|
||||||
cmp_b = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_b = (* func) (GTK_TREE_MODEL (list_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter,
|
|
||||||
header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1568,11 +1592,9 @@ gtk_list_store_sort_iter_changed (GtkListStore *list_store,
|
|||||||
new_location = 0;
|
new_location = 0;
|
||||||
tmp_iter.user_data = list;
|
tmp_iter.user_data = list;
|
||||||
if (list_store->order == GTK_SORT_DESCENDING)
|
if (list_store->order == GTK_SORT_DESCENDING)
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (list_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter, header->data);
|
|
||||||
else
|
else
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (list_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter, header->data);
|
|
||||||
|
|
||||||
while ((list->next) && (cmp_a > 0))
|
while ((list->next) && (cmp_a > 0))
|
||||||
{
|
{
|
||||||
@ -1581,11 +1603,9 @@ gtk_list_store_sort_iter_changed (GtkListStore *list_store,
|
|||||||
new_location++;
|
new_location++;
|
||||||
tmp_iter.user_data = list;
|
tmp_iter.user_data = list;
|
||||||
if (list_store->order == GTK_SORT_DESCENDING)
|
if (list_store->order == GTK_SORT_DESCENDING)
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (list_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter, header->data);
|
|
||||||
else
|
else
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (list_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (list_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter, header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!list->next) && (cmp_a > 0))
|
if ((!list->next) && (cmp_a > 0))
|
||||||
@ -1667,26 +1687,32 @@ gtk_list_store_set_sort_column_id (GtkTreeSortable *sortable,
|
|||||||
GtkSortType order)
|
GtkSortType order)
|
||||||
{
|
{
|
||||||
GtkListStore *list_store = (GtkListStore *) sortable;
|
GtkListStore *list_store = (GtkListStore *) sortable;
|
||||||
GList *list;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_LIST_STORE (sortable));
|
g_return_if_fail (GTK_IS_LIST_STORE (sortable));
|
||||||
|
|
||||||
for (list = list_store->sort_list; list; list = list->next)
|
|
||||||
{
|
|
||||||
GtkTreeDataSortHeader *header = (GtkTreeDataSortHeader*) list->data;
|
|
||||||
if (header->sort_column_id == sort_column_id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
g_return_if_fail (list != NULL);
|
|
||||||
|
|
||||||
if ((list_store->sort_column_id == sort_column_id) &&
|
if ((list_store->sort_column_id == sort_column_id) &&
|
||||||
(list_store->order == order))
|
(list_store->order == order))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header = NULL;
|
||||||
|
|
||||||
|
header = _gtk_tree_data_list_get_header (list_store->sort_list, sort_column_id);
|
||||||
|
|
||||||
|
/* We want to make sure that we have a function */
|
||||||
|
g_return_if_fail (header != NULL);
|
||||||
|
g_return_if_fail (header->func != NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_if_fail (list_store->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
list_store->sort_column_id = sort_column_id;
|
list_store->sort_column_id = sort_column_id;
|
||||||
list_store->order = order;
|
list_store->order = order;
|
||||||
|
|
||||||
if (list_store->sort_column_id >= 0)
|
|
||||||
gtk_list_store_sort (list_store);
|
gtk_list_store_sort (list_store);
|
||||||
|
|
||||||
gtk_tree_sortable_sort_column_changed (sortable);
|
gtk_tree_sortable_sort_column_changed (sortable);
|
||||||
@ -1727,3 +1753,32 @@ gtk_list_store_set_sort_func (GtkTreeSortable *sortable,
|
|||||||
header->data = data;
|
header->data = data;
|
||||||
header->destroy = destroy;
|
header->destroy = destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_list_store_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
GtkListStore *list_store = (GtkListStore *) sortable;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_LIST_STORE (sortable));
|
||||||
|
|
||||||
|
if (list_store->default_sort_destroy)
|
||||||
|
(* list_store->default_sort_destroy) (list_store->default_sort_data);
|
||||||
|
|
||||||
|
list_store->default_sort_func = func;
|
||||||
|
list_store->default_sort_data = data;
|
||||||
|
list_store->default_sort_destroy = destroy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_list_store_has_default_sort_func (GtkTreeSortable *sortable)
|
||||||
|
{
|
||||||
|
GtkListStore *list_store = (GtkListStore *) sortable;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GTK_IS_LIST_STORE (sortable), FALSE);
|
||||||
|
|
||||||
|
return (list_store->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
@ -51,6 +51,9 @@ struct _GtkListStore
|
|||||||
GtkSortType order;
|
GtkSortType order;
|
||||||
GType *column_headers;
|
GType *column_headers;
|
||||||
gint length;
|
gint length;
|
||||||
|
GtkTreeIterCompareFunc default_sort_func;
|
||||||
|
gpointer default_sort_data;
|
||||||
|
GtkDestroyNotify default_sort_destroy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkListStoreClass
|
struct _GtkListStoreClass
|
||||||
|
@ -130,4 +130,35 @@ gtk_tree_sortable_set_sort_func (GtkTreeSortable *sortable,
|
|||||||
(* iface->set_sort_func) (sortable, sort_column_id, func, data, destroy);
|
(* iface->set_sort_func) (sortable, sort_column_id, func, data, destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gtk_tree_sortable_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
GtkTreeSortableIface *iface;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_TREE_SORTABLE (sortable));
|
||||||
|
|
||||||
|
iface = GTK_TREE_SORTABLE_GET_IFACE (sortable);
|
||||||
|
|
||||||
|
g_return_if_fail (iface != NULL);
|
||||||
|
g_return_if_fail (iface->set_default_sort_func != NULL);
|
||||||
|
|
||||||
|
(* iface->set_default_sort_func) (sortable, func, data, destroy);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
gtk_tree_sortable_has_default_sort_func (GtkTreeSortable *sortable)
|
||||||
|
{
|
||||||
|
GtkTreeSortableIface *iface;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_TREE_SORTABLE (sortable));
|
||||||
|
|
||||||
|
iface = GTK_TREE_SORTABLE_GET_IFACE (sortable);
|
||||||
|
|
||||||
|
g_return_if_fail (iface != NULL);
|
||||||
|
g_return_if_fail (iface->has_default_sort_func != NULL);
|
||||||
|
|
||||||
|
(* iface->has_default_sort_func) (sortable);
|
||||||
|
}
|
||||||
|
@ -22,9 +22,7 @@
|
|||||||
|
|
||||||
#include <gtk/gtktreemodel.h>
|
#include <gtk/gtktreemodel.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
G_BEGIN_DECLS
|
||||||
extern "C" {
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
#define GTK_TYPE_TREE_SORTABLE (gtk_tree_sortable_get_type ())
|
#define GTK_TYPE_TREE_SORTABLE (gtk_tree_sortable_get_type ())
|
||||||
#define GTK_TREE_SORTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_SORTABLE, GtkTreeSortable))
|
#define GTK_TREE_SORTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_SORTABLE, GtkTreeSortable))
|
||||||
@ -32,6 +30,9 @@ extern "C" {
|
|||||||
#define GTK_IS_TREE_SORTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_SORTABLE))
|
#define GTK_IS_TREE_SORTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_SORTABLE))
|
||||||
#define GTK_TREE_SORTABLE_GET_IFACE(obj) ((GtkTreeSortableIface *)g_type_interface_peek (((GTypeInstance *)GTK_TREE_SORTABLE (obj))->g_class, GTK_TYPE_TREE_SORTABLE))
|
#define GTK_TREE_SORTABLE_GET_IFACE(obj) ((GtkTreeSortableIface *)g_type_interface_peek (((GTypeInstance *)GTK_TREE_SORTABLE (obj))->g_class, GTK_TYPE_TREE_SORTABLE))
|
||||||
|
|
||||||
|
enum {
|
||||||
|
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID = -1,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct _GtkTreeSortable GtkTreeSortable; /* Dummy typedef */
|
typedef struct _GtkTreeSortable GtkTreeSortable; /* Dummy typedef */
|
||||||
typedef struct _GtkTreeSortableIface GtkTreeSortableIface;
|
typedef struct _GtkTreeSortableIface GtkTreeSortableIface;
|
||||||
@ -61,6 +62,11 @@ struct _GtkTreeSortableIface
|
|||||||
GtkTreeIterCompareFunc func,
|
GtkTreeIterCompareFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy);
|
GtkDestroyNotify destroy);
|
||||||
|
void (* set_default_sort_func) (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy);
|
||||||
|
gboolean (* has_default_sort_func) (GtkTreeSortable *sortable);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -78,12 +84,13 @@ void gtk_tree_sortable_set_sort_func (GtkTreeSortable *sortable
|
|||||||
GtkTreeIterCompareFunc func,
|
GtkTreeIterCompareFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy);
|
GtkDestroyNotify destroy);
|
||||||
|
void gtk_tree_sortable_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy);
|
||||||
|
gboolean gtk_tree_sortable_has_default_sort_func (GtkTreeSortable *sortable);
|
||||||
|
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /* __cplusplus */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GTK_TREE_SORTABLE_H__ */
|
#endif /* __GTK_TREE_SORTABLE_H__ */
|
||||||
|
@ -103,7 +103,11 @@ static void gtk_tree_store_set_sort_func (GtkTreeSortable *sortable,
|
|||||||
GtkTreeIterCompareFunc func,
|
GtkTreeIterCompareFunc func,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy);
|
GtkDestroyNotify destroy);
|
||||||
|
static void gtk_tree_store_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy);
|
||||||
|
static gboolean gtk_tree_store_has_default_sort_func (GtkTreeSortable *sortable);
|
||||||
|
|
||||||
static void validate_gnode (GNode *node);
|
static void validate_gnode (GNode *node);
|
||||||
|
|
||||||
@ -232,6 +236,8 @@ gtk_tree_store_sortable_init (GtkTreeSortableIface *iface)
|
|||||||
iface->get_sort_column_id = gtk_tree_store_get_sort_column_id;
|
iface->get_sort_column_id = gtk_tree_store_get_sort_column_id;
|
||||||
iface->set_sort_column_id = gtk_tree_store_set_sort_column_id;
|
iface->set_sort_column_id = gtk_tree_store_set_sort_column_id;
|
||||||
iface->set_sort_func = gtk_tree_store_set_sort_func;
|
iface->set_sort_func = gtk_tree_store_set_sort_func;
|
||||||
|
iface->set_default_sort_func = gtk_tree_store_set_default_sort_func;
|
||||||
|
iface->has_default_sort_func = gtk_tree_store_has_default_sort_func;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1465,19 +1471,34 @@ gtk_tree_store_compare_func (gconstpointer a,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkTreeStore *tree_store = user_data;
|
GtkTreeStore *tree_store = user_data;
|
||||||
GtkTreeDataSortHeader *header = NULL;
|
|
||||||
GNode *node_a;
|
GNode *node_a;
|
||||||
GNode *node_b;
|
GNode *node_b;
|
||||||
|
GtkTreeIterCompareFunc func;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
GtkTreeIter iter_a;
|
GtkTreeIter iter_a;
|
||||||
GtkTreeIter iter_b;
|
GtkTreeIter iter_b;
|
||||||
gint retval;
|
gint retval;
|
||||||
|
|
||||||
|
if (tree_store->sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header;
|
||||||
|
|
||||||
header = _gtk_tree_data_list_get_header (tree_store->sort_list,
|
header = _gtk_tree_data_list_get_header (tree_store->sort_list,
|
||||||
tree_store->sort_column_id);
|
tree_store->sort_column_id);
|
||||||
|
|
||||||
g_return_val_if_fail (header != NULL, 0);
|
g_return_val_if_fail (header != NULL, 0);
|
||||||
g_return_val_if_fail (header->func != NULL, 0);
|
g_return_val_if_fail (header->func != NULL, 0);
|
||||||
|
|
||||||
|
func = header->func;
|
||||||
|
data = header->data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (tree_store->default_sort_func != NULL, 0);
|
||||||
|
func = tree_store->default_sort_func;
|
||||||
|
data = tree_store->default_sort_data;
|
||||||
|
}
|
||||||
|
|
||||||
node_a = ((SortTuple *) a)->node;
|
node_a = ((SortTuple *) a)->node;
|
||||||
node_b = ((SortTuple *) b)->node;
|
node_b = ((SortTuple *) b)->node;
|
||||||
|
|
||||||
@ -1486,9 +1507,7 @@ gtk_tree_store_compare_func (gconstpointer a,
|
|||||||
iter_b.stamp = tree_store->stamp;
|
iter_b.stamp = tree_store->stamp;
|
||||||
iter_b.user_data = node_b;
|
iter_b.user_data = node_b;
|
||||||
|
|
||||||
retval = (* header->func) (GTK_TREE_MODEL (user_data),
|
retval = (* func) (GTK_TREE_MODEL (user_data), &iter_a, &iter_b, data);
|
||||||
&iter_a, &iter_b,
|
|
||||||
header->data);
|
|
||||||
|
|
||||||
if (tree_store->order == GTK_SORT_DESCENDING)
|
if (tree_store->order == GTK_SORT_DESCENDING)
|
||||||
{
|
{
|
||||||
@ -1505,7 +1524,6 @@ gtk_tree_store_sort_helper (GtkTreeStore *tree_store,
|
|||||||
GNode *parent,
|
GNode *parent,
|
||||||
gboolean recurse)
|
gboolean recurse)
|
||||||
{
|
{
|
||||||
GtkTreeDataSortHeader *header = NULL;
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GArray *sort_array;
|
GArray *sort_array;
|
||||||
GNode *node;
|
GNode *node;
|
||||||
@ -1521,12 +1539,6 @@ gtk_tree_store_sort_helper (GtkTreeStore *tree_store,
|
|||||||
|
|
||||||
g_assert (GTK_TREE_STORE_IS_SORTED (tree_store));
|
g_assert (GTK_TREE_STORE_IS_SORTED (tree_store));
|
||||||
|
|
||||||
header = _gtk_tree_data_list_get_header (tree_store->sort_list, tree_store->sort_column_id);
|
|
||||||
|
|
||||||
/* We want to make sure that we have a function */
|
|
||||||
g_return_if_fail (header != NULL);
|
|
||||||
g_return_if_fail (header->func != NULL);
|
|
||||||
|
|
||||||
list_length = 0;
|
list_length = 0;
|
||||||
for (tmp_node = node; tmp_node; tmp_node = tmp_node->next)
|
for (tmp_node = node; tmp_node; tmp_node = tmp_node->next)
|
||||||
list_length++;
|
list_length++;
|
||||||
@ -1584,6 +1596,21 @@ gtk_tree_store_sort_helper (GtkTreeStore *tree_store,
|
|||||||
static void
|
static void
|
||||||
gtk_tree_store_sort (GtkTreeStore *tree_store)
|
gtk_tree_store_sort (GtkTreeStore *tree_store)
|
||||||
{
|
{
|
||||||
|
if (tree_store->sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header = NULL;
|
||||||
|
|
||||||
|
header = _gtk_tree_data_list_get_header (tree_store->sort_list, tree_store->sort_column_id);
|
||||||
|
|
||||||
|
/* We want to make sure that we have a function */
|
||||||
|
g_return_if_fail (header != NULL);
|
||||||
|
g_return_if_fail (header->func != NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_if_fail (tree_store->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_tree_store_sort_helper (tree_store, G_NODE (tree_store->root), TRUE);
|
gtk_tree_store_sort_helper (tree_store, G_NODE (tree_store->root), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1592,7 +1619,6 @@ gtk_tree_store_sort_iter_changed (GtkTreeStore *tree_store,
|
|||||||
GtkTreeIter *iter,
|
GtkTreeIter *iter,
|
||||||
gint column)
|
gint column)
|
||||||
{
|
{
|
||||||
GtkTreeDataSortHeader *header;
|
|
||||||
GNode *prev = NULL;
|
GNode *prev = NULL;
|
||||||
GNode *next = NULL;
|
GNode *next = NULL;
|
||||||
GNode *node;
|
GNode *node;
|
||||||
@ -1605,18 +1631,31 @@ gtk_tree_store_sort_iter_changed (GtkTreeStore *tree_store,
|
|||||||
gint new_location;
|
gint new_location;
|
||||||
gint *new_order;
|
gint *new_order;
|
||||||
gint length;
|
gint length;
|
||||||
|
GtkTreeIterCompareFunc func;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
g_return_if_fail (G_NODE (iter->user_data)->parent != NULL);
|
g_return_if_fail (G_NODE (iter->user_data)->parent != NULL);
|
||||||
|
|
||||||
|
|
||||||
tmp_iter.stamp = tree_store->stamp;
|
tmp_iter.stamp = tree_store->stamp;
|
||||||
|
if (tree_store->sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header;
|
||||||
header = _gtk_tree_data_list_get_header (tree_store->sort_list,
|
header = _gtk_tree_data_list_get_header (tree_store->sort_list,
|
||||||
tree_store->sort_column_id);
|
tree_store->sort_column_id);
|
||||||
g_return_if_fail (header != NULL);
|
g_return_if_fail (header != NULL);
|
||||||
g_return_if_fail (header->func != NULL);
|
g_return_if_fail (header->func != NULL);
|
||||||
|
func = header->func;
|
||||||
|
data = header->data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_if_fail (tree_store->default_sort_func != NULL);
|
||||||
|
func = tree_store->default_sort_func;
|
||||||
|
data = tree_store->default_sort_data;
|
||||||
|
}
|
||||||
|
|
||||||
/* If it's the built in function, we don't sort. */
|
/* If it's the built in function, we don't sort. */
|
||||||
if (header->func == gtk_tree_data_list_compare_func &&
|
if (func == gtk_tree_data_list_compare_func &&
|
||||||
tree_store->sort_column_id != column)
|
tree_store->sort_column_id != column)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1639,17 +1678,13 @@ gtk_tree_store_sort_iter_changed (GtkTreeStore *tree_store,
|
|||||||
if (prev != NULL)
|
if (prev != NULL)
|
||||||
{
|
{
|
||||||
tmp_iter.user_data = prev;
|
tmp_iter.user_data = prev;
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (tree_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter,
|
|
||||||
header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (next != NULL)
|
if (next != NULL)
|
||||||
{
|
{
|
||||||
tmp_iter.user_data = next;
|
tmp_iter.user_data = next;
|
||||||
cmp_b = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_b = (* func) (GTK_TREE_MODEL (tree_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter,
|
|
||||||
header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1693,11 +1728,9 @@ gtk_tree_store_sort_iter_changed (GtkTreeStore *tree_store,
|
|||||||
new_location = 0;
|
new_location = 0;
|
||||||
tmp_iter.user_data = node;
|
tmp_iter.user_data = node;
|
||||||
if (tree_store->order == GTK_SORT_DESCENDING)
|
if (tree_store->order == GTK_SORT_DESCENDING)
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (tree_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter, header->data);
|
|
||||||
else
|
else
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (tree_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter, header->data);
|
|
||||||
|
|
||||||
while ((node->next) && (cmp_a > 0))
|
while ((node->next) && (cmp_a > 0))
|
||||||
{
|
{
|
||||||
@ -1706,11 +1739,9 @@ gtk_tree_store_sort_iter_changed (GtkTreeStore *tree_store,
|
|||||||
new_location++;
|
new_location++;
|
||||||
tmp_iter.user_data = node;
|
tmp_iter.user_data = node;
|
||||||
if (tree_store->order == GTK_SORT_DESCENDING)
|
if (tree_store->order == GTK_SORT_DESCENDING)
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (tree_store), &tmp_iter, iter, data);
|
||||||
&tmp_iter, iter, header->data);
|
|
||||||
else
|
else
|
||||||
cmp_a = (* header->func) (GTK_TREE_MODEL (tree_store),
|
cmp_a = (* func) (GTK_TREE_MODEL (tree_store), iter, &tmp_iter, data);
|
||||||
iter, &tmp_iter, header->data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!node->next) && (cmp_a > 0))
|
if ((!node->next) && (cmp_a > 0))
|
||||||
@ -1797,26 +1828,32 @@ gtk_tree_store_set_sort_column_id (GtkTreeSortable *sortable,
|
|||||||
GtkSortType order)
|
GtkSortType order)
|
||||||
{
|
{
|
||||||
GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
|
GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
|
||||||
GList *list;
|
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_TREE_STORE (sortable));
|
g_return_if_fail (GTK_IS_TREE_STORE (sortable));
|
||||||
|
|
||||||
for (list = tree_store->sort_list; list; list = list->next)
|
|
||||||
{
|
|
||||||
GtkTreeDataSortHeader *header = (GtkTreeDataSortHeader*) list->data;
|
|
||||||
if (header->sort_column_id == sort_column_id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
g_return_if_fail (list != NULL);
|
|
||||||
|
|
||||||
if ((tree_store->sort_column_id == sort_column_id) &&
|
if ((tree_store->sort_column_id == sort_column_id) &&
|
||||||
(tree_store->order == order))
|
(tree_store->order == order))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (sort_column_id != -1)
|
||||||
|
{
|
||||||
|
GtkTreeDataSortHeader *header = NULL;
|
||||||
|
|
||||||
|
header = _gtk_tree_data_list_get_header (tree_store->sort_list, sort_column_id);
|
||||||
|
|
||||||
|
/* We want to make sure that we have a function */
|
||||||
|
g_return_if_fail (header != NULL);
|
||||||
|
g_return_if_fail (header->func != NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_return_if_fail (tree_store->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
tree_store->sort_column_id = sort_column_id;
|
tree_store->sort_column_id = sort_column_id;
|
||||||
tree_store->order = order;
|
tree_store->order = order;
|
||||||
|
|
||||||
if (tree_store->sort_column_id >= 0)
|
|
||||||
gtk_tree_store_sort (tree_store);
|
gtk_tree_store_sort (tree_store);
|
||||||
|
|
||||||
gtk_tree_sortable_sort_column_changed (sortable);
|
gtk_tree_sortable_sort_column_changed (sortable);
|
||||||
@ -1859,6 +1896,34 @@ gtk_tree_store_set_sort_func (GtkTreeSortable *sortable,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_tree_store_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
|
GtkTreeIterCompareFunc func,
|
||||||
|
gpointer data,
|
||||||
|
GtkDestroyNotify destroy)
|
||||||
|
{
|
||||||
|
GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_TREE_STORE (sortable));
|
||||||
|
|
||||||
|
if (tree_store->default_sort_destroy)
|
||||||
|
(* tree_store->default_sort_destroy) (tree_store->default_sort_data);
|
||||||
|
|
||||||
|
tree_store->default_sort_func = func;
|
||||||
|
tree_store->default_sort_data = data;
|
||||||
|
tree_store->default_sort_destroy = destroy;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_tree_store_has_default_sort_func (GtkTreeSortable *sortable)
|
||||||
|
{
|
||||||
|
GtkTreeStore *tree_store = (GtkTreeStore *) sortable;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GTK_IS_TREE_STORE (sortable), FALSE);
|
||||||
|
|
||||||
|
return (tree_store->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
validate_gnode (GNode* node)
|
validate_gnode (GNode* node)
|
||||||
{
|
{
|
||||||
|
@ -50,6 +50,9 @@ struct _GtkTreeStore
|
|||||||
GList *sort_list;
|
GList *sort_list;
|
||||||
GtkSortType order;
|
GtkSortType order;
|
||||||
GType *column_headers;
|
GType *column_headers;
|
||||||
|
GtkTreeIterCompareFunc default_sort_func;
|
||||||
|
gpointer default_sort_data;
|
||||||
|
GtkDestroyNotify default_sort_destroy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkTreeStoreClass
|
struct _GtkTreeStoreClass
|
||||||
|
Loading…
Reference in New Issue
Block a user