summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2018-01-16 18:16:21 -0500
committerMatthias Clasen <mclasen@redhat.com>2018-01-16 18:17:54 -0500
commite2f3b9b1cceb11d5759cc004a5e6fc49d20e1b07 (patch)
tree54909cbfd6a3a7cfee015deeddff66034c3e23c7
parent42369e31e2ed127abac6a9cd06ac64e27a6e398b (diff)
downloadgtk+-e2f3b9b1cceb11d5759cc004a5e6fc49d20e1b07.tar.gz
tree model sort: Fix set_sort_column
We were failing to change the sort order for the default sort column in some cases. Fix that, and add a testcase for this issue. https://bugzilla.gnome.org/show_bug.cgi?id=792459 Add a testcase for the previous fix
-rw-r--r--gtk/gtktreemodelsort.c14
-rw-r--r--testsuite/gtk/sortmodel.c89
2 files changed, 92 insertions, 11 deletions
diff --git a/gtk/gtktreemodelsort.c b/gtk/gtktreemodelsort.c
index 761e01fa55..aeffee9cb7 100644
--- a/gtk/gtktreemodelsort.c
+++ b/gtk/gtktreemodelsort.c
@@ -1684,6 +1684,9 @@ gtk_tree_model_sort_set_sort_column_id (GtkTreeSortable *sortable,
GtkTreeModelSort *tree_model_sort = (GtkTreeModelSort *)sortable;
GtkTreeModelSortPrivate *priv = tree_model_sort->priv;
+ if (priv->sort_column_id == sort_column_id && priv->order == order)
+ return;
+
if (sort_column_id != GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID)
{
if (sort_column_id != GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID)
@@ -1699,17 +1702,6 @@ gtk_tree_model_sort_set_sort_column_id (GtkTreeSortable *sortable,
}
else
g_return_if_fail (priv->default_sort_func != NULL);
-
- if (priv->sort_column_id == sort_column_id)
- {
- if (sort_column_id != GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID)
- {
- if (priv->order == order)
- return;
- }
- else
- return;
- }
}
priv->sort_column_id = sort_column_id;
diff --git a/testsuite/gtk/sortmodel.c b/testsuite/gtk/sortmodel.c
index a24f8a3630..f9a7eb1886 100644
--- a/testsuite/gtk/sortmodel.c
+++ b/testsuite/gtk/sortmodel.c
@@ -1202,6 +1202,93 @@ specific_bug_698846 (void)
g_assert_cmpuint (count, ==, 2);
}
+static int
+sort_func (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer data)
+{
+ return 0;
+}
+
+static int column_changed;
+
+static void
+sort_column_changed (GtkTreeSortable *sortable)
+{
+ column_changed++;
+}
+
+static void
+sort_column_change (void)
+{
+ GtkListStore *store;
+ GtkTreeModel *sorted;
+ int col;
+ GtkSortType order;
+ gboolean ret;
+
+ g_test_bug ("792459");
+
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ sorted = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
+
+ column_changed = 0;
+ g_signal_connect (sorted, "sort-column-changed", G_CALLBACK (sort_column_changed), NULL);
+
+ g_assert (!gtk_tree_sortable_has_default_sort_func (GTK_TREE_SORTABLE (sorted)));
+ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (sorted), sort_func, NULL, NULL);
+ g_assert (gtk_tree_sortable_has_default_sort_func (GTK_TREE_SORTABLE (sorted)));
+
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (sorted), 0, sort_func, NULL, NULL);
+
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 0);
+ g_assert (ret == FALSE);
+ g_assert (col == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID);
+ g_assert (order == GTK_SORT_ASCENDING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sorted),
+ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_DESCENDING);
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 1);
+ g_assert (ret == FALSE);
+ g_assert (col == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID);
+ g_assert (order == GTK_SORT_DESCENDING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sorted),
+ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_DESCENDING);
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 1);
+ g_assert (ret == FALSE);
+ g_assert (col == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID);
+ g_assert (order == GTK_SORT_DESCENDING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sorted),
+ 0, GTK_SORT_DESCENDING);
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 2);
+ g_assert (ret == TRUE);
+ g_assert (col == 0);
+ g_assert (order == GTK_SORT_DESCENDING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sorted),
+ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 3);
+ g_assert (ret == FALSE);
+ g_assert (col == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID);
+ g_assert (order == GTK_SORT_ASCENDING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sorted),
+ GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
+ ret = gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (sorted), &col, &order);
+ g_assert (column_changed == 4);
+ g_assert (ret == FALSE);
+ g_assert (col == GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID);
+ g_assert (order == GTK_SORT_ASCENDING);
+}
+
/* main */
void
@@ -1239,5 +1326,7 @@ register_sort_model_tests (void)
specific_bug_674587);
g_test_add_func ("/TreeModelSort/specific/bug-698846",
specific_bug_698846);
+ g_test_add_func ("/TreeModelSort/specific/bug-792459",
+ sort_column_change);
}