[gtk+] Add a test for ::row-changed vs node refs



commit f942d6f53cbbefd53afa03dd1e9492f690e68ea2
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jan 19 16:02:42 2018 +0100

    Add a test for ::row-changed vs node refs
    
    Test that filter models propagate ::row-changed if there is
    an external reference on the node, and not otherwise. This
    is showing up in buggy icon view behaviour, where the icon
    view is not redrawing if the content changes in a model that
    is below a filter model.

 testsuite/gtk/filtermodel.c |   71 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/testsuite/gtk/filtermodel.c b/testsuite/gtk/filtermodel.c
index c54430b..ce0defa 100644
--- a/testsuite/gtk/filtermodel.c
+++ b/testsuite/gtk/filtermodel.c
@@ -6755,6 +6755,75 @@ specific_bug_679910 (void)
   g_object_unref (store);
 }
 
+static int row_changed_count;
+static int filter_row_changed_count;
+
+static void
+row_changed (GtkTreeModel *model,
+             GtkTreePath  *path,
+             GtkTreeIter  *iter,
+             gpointer data)
+{
+  int *count = data;
+
+  (*count)++;
+}
+
+static void
+test_row_changed (void)
+{
+  GtkTreeModel *filter;
+  GtkListStore *store;
+  GtkTreeIter iter1, iter2, iter3;
+  GtkTreeIter fiter1, fiter2, fiter3;
+
+  store = gtk_list_store_new (1, G_TYPE_INT);
+  filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
+
+  gtk_list_store_append (store, &iter1);
+  gtk_list_store_append (store, &iter2);
+  gtk_list_store_append (store, &iter3);
+
+  gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (filter), &fiter1, &iter1);
+  gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (filter), &fiter2, &iter2);
+  gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (filter), &fiter3, &iter3);
+
+  g_signal_connect (store, "row-changed", G_CALLBACK (row_changed), &row_changed_count);
+  g_signal_connect (filter, "row-changed", G_CALLBACK (row_changed), &filter_row_changed_count);
+
+  row_changed_count = 0;
+  filter_row_changed_count = 0;
+
+  gtk_list_store_set (store, &iter1, 0, 1, -1);
+  gtk_list_store_set (store, &iter2, 0, 1, -1);
+  gtk_list_store_set (store, &iter3, 0, 1, -1);
+
+  g_assert (row_changed_count == 3);
+  g_assert (filter_row_changed_count == 0);
+
+  row_changed_count = 0;
+  filter_row_changed_count = 0;
+
+  gtk_tree_model_ref_node (filter, &fiter1);
+  gtk_tree_model_ref_node (filter, &fiter2);
+  gtk_tree_model_ref_node (filter, &fiter3);
+
+  gtk_list_store_set (store, &iter1, 0, 2, -1);
+  gtk_list_store_set (store, &iter2, 0, 2, -1);
+  gtk_list_store_set (store, &iter3, 0, 2, -1);
+
+  g_assert (row_changed_count == 3);
+  g_assert (filter_row_changed_count == 3);
+
+  gtk_tree_model_unref_node (filter, &fiter1);
+  gtk_tree_model_unref_node (filter, &fiter2);
+  gtk_tree_model_unref_node (filter, &fiter3);
+
+  g_object_unref (filter);
+  g_object_unref (store);
+}
+
+
 /* main */
 
 void
@@ -7116,4 +7185,6 @@ register_filter_model_tests (void)
                    specific_bug_659022_row_deleted_free_level);
   g_test_add_func ("/TreeModelFilter/specific/bug-679910",
                    specific_bug_679910);
+
+  g_test_add_func ("/TreeModelFilter/signal/row-changed", test_row_changed);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]