[gtk+/gtk-3-22] Add a test for ::row-changed vs node refs
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-22] Add a test for ::row-changed vs node refs
- Date: Fri, 19 Jan 2018 20:32:13 +0000 (UTC)
commit 5b19d6b1b80a5ae94853a57776d80b8952befab6
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 a67151b..13fd8b9 100644
--- a/testsuite/gtk/filtermodel.c
+++ b/testsuite/gtk/filtermodel.c
@@ -6782,6 +6782,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
@@ -7143,4 +7212,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]