From e518c1f2f32a50b3c2907208634ce7ee43fffa7b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 12 Jul 2020 07:02:04 +0200 Subject: [PATCH] stringfilter: Make the constructor take an expression An expression is critically important for a string filter and people should be made aware of it when constructing the filter. --- demos/gtk-demo/listview_settings.c | 6 +-- demos/gtk-demo/listview_words.c | 6 +-- gtk/gtkdropdown.c | 3 +- gtk/gtkprintunixdialog.c | 13 +++--- gtk/gtkstringfilter.c | 16 ++++++-- gtk/gtkstringfilter.h | 8 ++-- gtk/inspector/prop-list.c | 2 +- testsuite/gtk/expression.c | 46 +++++++++++----------- testsuite/gtk/filter.c | 32 ++++++--------- testsuite/gtk/filterlistmodel-exhaustive.c | 10 ++--- 10 files changed, 64 insertions(+), 78 deletions(-) diff --git a/demos/gtk-demo/listview_settings.c b/demos/gtk-demo/listview_settings.c index 3c0de54d9f..7dc55ada2f 100644 --- a/demos/gtk-demo/listview_settings.c +++ b/demos/gtk-demo/listview_settings.c @@ -215,7 +215,6 @@ transform_settings_to_keys (GBinding *binding, GtkFilterListModel *filter_model; GtkFilter *filter; GtkNoSelection *selection_model; - GtkExpression *expression; char **keys; guint i; @@ -246,11 +245,8 @@ transform_settings_to_keys (GBinding *binding, gtk_column_view_get_sorter (GTK_COLUMN_VIEW (data))); g_object_unref (store); - expression = gtk_property_expression_new (SETTINGS_TYPE_KEY, NULL, "name"); - filter = gtk_string_filter_new (); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), expression); + filter = gtk_string_filter_new (gtk_property_expression_new (SETTINGS_TYPE_KEY, NULL, "name")); filter_model = gtk_filter_list_model_new (G_LIST_MODEL (sort_model), filter); - gtk_expression_unref (expression); g_object_unref (sort_model); g_set_object (¤t_filter, filter); diff --git a/demos/gtk-demo/listview_words.c b/demos/gtk-demo/listview_words.c index be556696cf..95664ed279 100644 --- a/demos/gtk-demo/listview_words.c +++ b/demos/gtk-demo/listview_words.c @@ -160,7 +160,6 @@ do_listview_words (GtkWidget *do_widget) GtkNoSelection *selection; GtkStringList *stringlist; GtkFilter *filter; - GtkExpression *expression; GFile *file; file = g_file_new_for_path ("/usr/share/dict/words"); @@ -177,10 +176,7 @@ do_listview_words (GtkWidget *do_widget) g_strfreev (words); } - filter = gtk_string_filter_new (); - expression = gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string"); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), expression); - gtk_expression_unref (expression); + filter = gtk_string_filter_new (gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string")); filter_model = gtk_filter_list_model_new (G_LIST_MODEL (stringlist), filter); gtk_filter_list_model_set_incremental (filter_model, TRUE); diff --git a/gtk/gtkdropdown.c b/gtk/gtkdropdown.c index f89fb11391..de1ba763cb 100644 --- a/gtk/gtkdropdown.c +++ b/gtk/gtkdropdown.c @@ -205,9 +205,8 @@ update_filter (GtkDropDown *self) if (self->expression) { - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (gtk_expression_ref (self->expression)); gtk_string_filter_set_match_mode (GTK_STRING_FILTER (filter), GTK_STRING_FILTER_MATCH_MODE_PREFIX); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), self->expression); } else filter = gtk_every_filter_new (); diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index dab4548b49..681dc04272 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -744,7 +744,6 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog) GtkSorter *sorter; GtkFilter *filter; GtkFilter *filter1; - GtkExpression *expression; GtkListItemFactory *factory; GListStore *store; GListModel *paper_size_list; @@ -819,15 +818,13 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog) filter = gtk_every_filter_new (); - filter1 = gtk_string_filter_new (); + filter1 = gtk_string_filter_new ( + gtk_cclosure_expression_new (G_TYPE_STRING, + NULL, 0, NULL, + G_CALLBACK (get_printer_key), + NULL, NULL)); gtk_string_filter_set_match_mode (GTK_STRING_FILTER (filter1), GTK_STRING_FILTER_MATCH_MODE_SUBSTRING); gtk_string_filter_set_ignore_case (GTK_STRING_FILTER (filter1), TRUE); - expression = gtk_cclosure_expression_new (G_TYPE_STRING, - NULL, 0, NULL, - G_CALLBACK (get_printer_key), - NULL, NULL); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter1), expression); - gtk_expression_unref (expression); gtk_multi_filter_append (GTK_MULTI_FILTER (filter), filter1); filter1 = gtk_custom_filter_new (is_printer_active, dialog, NULL); diff --git a/gtk/gtkstringfilter.c b/gtk/gtkstringfilter.c index 3fa924e9c3..df45fe4f2a 100644 --- a/gtk/gtkstringfilter.c +++ b/gtk/gtkstringfilter.c @@ -302,7 +302,9 @@ gtk_string_filter_init (GtkStringFilter *self) } /** - * gtk_string_filter_new: + * gtk_s tring_filter_new: + * @expression: (transfer full) (nullable): The expression to evaluate + * or %NULL for none * * Creates a new string filter. * @@ -312,9 +314,17 @@ gtk_string_filter_init (GtkStringFilter *self) * Returns: a new #GtkStringFilter **/ GtkFilter * -gtk_string_filter_new (void) +gtk_string_filter_new (GtkExpression *expression) { - return g_object_new (GTK_TYPE_STRING_FILTER, NULL); + GtkFilter *result; + + result = g_object_new (GTK_TYPE_STRING_FILTER, + "expression", expression, + NULL); + + g_clear_pointer (&expression, gtk_expression_unref); + + return result; } /** diff --git a/gtk/gtkstringfilter.h b/gtk/gtkstringfilter.h index 2c5e866bac..fece96e7ae 100644 --- a/gtk/gtkstringfilter.h +++ b/gtk/gtkstringfilter.h @@ -51,7 +51,7 @@ GDK_AVAILABLE_IN_ALL G_DECLARE_FINAL_TYPE (GtkStringFilter, gtk_string_filter, GTK, STRING_FILTER, GtkFilter) GDK_AVAILABLE_IN_ALL -GtkFilter * gtk_string_filter_new (void); +GtkFilter * gtk_string_filter_new (GtkExpression *exporession); GDK_AVAILABLE_IN_ALL const char * gtk_string_filter_get_search (GtkStringFilter *self); @@ -69,10 +69,10 @@ GDK_AVAILABLE_IN_ALL void gtk_string_filter_set_ignore_case (GtkStringFilter *self, gboolean ignore_case); GDK_AVAILABLE_IN_ALL -GtkStringFilterMatchMode gtk_string_filter_get_match_mode (GtkStringFilter *self); +GtkStringFilterMatchMode gtk_string_filter_get_match_mode (GtkStringFilter *self); GDK_AVAILABLE_IN_ALL -void gtk_string_filter_set_match_mode (GtkStringFilter *self, - GtkStringFilterMatchMode mode); +void gtk_string_filter_set_match_mode (GtkStringFilter *self, + GtkStringFilterMatchMode mode); diff --git a/gtk/inspector/prop-list.c b/gtk/inspector/prop-list.c index 44a3e8ce0b..b30fe7a740 100644 --- a/gtk/inspector/prop-list.c +++ b/gtk/inspector/prop-list.c @@ -113,7 +113,7 @@ gtk_inspector_prop_list_init (GtkInspectorPropList *pl) pl->priv = gtk_inspector_prop_list_get_instance_private (pl); gtk_widget_init_template (GTK_WIDGET (pl)); - pl->priv->filter = gtk_string_filter_new (); + pl->priv->filter = gtk_string_filter_new (NULL); gtk_string_filter_set_match_mode (GTK_STRING_FILTER (pl->priv->filter), GTK_STRING_FILTER_MATCH_MODE_SUBSTRING); sorter = gtk_string_sorter_new (gtk_cclosure_expression_new (G_TYPE_STRING, NULL, diff --git a/testsuite/gtk/expression.c b/testsuite/gtk/expression.c index 08b6e4d97d..d5a8a07802 100644 --- a/testsuite/gtk/expression.c +++ b/testsuite/gtk/expression.c @@ -38,7 +38,7 @@ test_property (void) GtkStringFilter *filter; guint counter = 0; - filter = GTK_STRING_FILTER (gtk_string_filter_new ()); + filter = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "search"); watch = gtk_expression_watch (expr, filter, inc_counter, &counter, NULL); @@ -83,7 +83,7 @@ test_closure (void) GtkStringFilter *filter; guint counter = 0; - filter = GTK_STRING_FILTER (gtk_string_filter_new ()); + filter = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); pexpr[0] = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "search"); pexpr[1] = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "ignore-case"); pexpr[2] = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "match-mode"); @@ -156,7 +156,7 @@ test_object (void) GValue value = G_VALUE_INIT; gboolean res; - obj = G_OBJECT (gtk_string_filter_new ()); + obj = G_OBJECT (gtk_string_filter_new (NULL)); expr = gtk_object_expression_new (obj); g_assert_true (!gtk_expression_is_static (expr)); @@ -200,7 +200,7 @@ test_nested (void) GtkExpressionWatch *watch; guint counter = 0; - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word"); list = G_LIST_MODEL (g_list_store_new (G_TYPE_OBJECT)); filtered = gtk_filter_list_model_new (list, filter); @@ -231,7 +231,7 @@ test_nested (void) g_assert_cmpint (counter, ==, 0); g_clear_object (&filter); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "salad"); gtk_filter_list_model_set_filter (filtered, filter); g_assert_cmpint (counter, ==, 1); @@ -289,7 +289,7 @@ test_nested_this_destroyed (void) GtkExpressionWatch *watch; guint counter = 0; - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word"); list = G_LIST_MODEL (g_list_store_new (G_TYPE_OBJECT)); filtered = gtk_filter_list_model_new (list, filter); @@ -308,7 +308,7 @@ test_nested_this_destroyed (void) g_clear_object (&filter); g_assert_cmpint (counter, ==, 0); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "salad"); gtk_filter_list_model_set_filter (filtered, filter); g_assert_cmpint (counter, ==, 1); @@ -373,10 +373,10 @@ test_this (void) expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "search"); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word"); - filter2 = gtk_string_filter_new (); + filter2 = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter2), "sausage"); res = gtk_expression_evaluate (expr, filter, &value); @@ -429,11 +429,11 @@ test_bind (void) expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "search"); - target = gtk_string_filter_new (); + target = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (target), "word"); g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (target)), ==, "word"); - source = gtk_string_filter_new (); + source = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (source), "sausage"); watch = gtk_expression_bind (expr, target, "search", source); @@ -468,7 +468,7 @@ test_bind_self (void) NULL, "ignore-case"); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word"); g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "word"); @@ -491,7 +491,7 @@ test_bind_child (void) NULL, "filter"); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); child = gtk_filter_list_model_new (NULL, NULL); gtk_filter_list_model_set_filter (child, filter); target = gtk_filter_list_model_new (G_LIST_MODEL (child), NULL); @@ -501,7 +501,7 @@ test_bind_child (void) gtk_expression_bind (expr, target, "filter", child); g_assert_true (gtk_filter_list_model_get_filter (child) == gtk_filter_list_model_get_filter (target)); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_filter_list_model_set_filter (child, filter); g_assert_true (filter == gtk_filter_list_model_get_filter (target)); g_assert_true (gtk_filter_list_model_get_filter (child) == gtk_filter_list_model_get_filter (target)); @@ -524,7 +524,7 @@ test_nested_bind (void) gboolean res; GValue value = G_VALUE_INIT; - filter2 = gtk_string_filter_new (); + filter2 = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter2), "sausage"); list = G_LIST_MODEL (g_list_store_new (G_TYPE_OBJECT)); @@ -535,7 +535,7 @@ test_nested_bind (void) "filter"); expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, gtk_expression_ref (filter_expr), "search"); - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word"); g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "word"); @@ -544,7 +544,7 @@ test_nested_bind (void) gtk_string_filter_set_search (GTK_STRING_FILTER (filter2), "sausage"); g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "sausage"); - filter3 = gtk_string_filter_new (); + filter3 = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter3), "banana"); gtk_filter_list_model_set_filter (filtered, filter3); @@ -599,8 +599,8 @@ test_double_bind (void) GtkExpression *filter_expr; GtkExpression *params[2]; - filter1 = GTK_STRING_FILTER (gtk_string_filter_new ()); - filter2 = GTK_STRING_FILTER (gtk_string_filter_new ()); + filter1 = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); + filter2 = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); filter_expr = gtk_object_expression_new (G_OBJECT (filter1)); @@ -640,9 +640,9 @@ test_binds (void) GtkExpression *filter2_expr; GtkExpression *params[2]; - filter1 = GTK_STRING_FILTER (gtk_string_filter_new ()); - filter2 = GTK_STRING_FILTER (gtk_string_filter_new ()); - filter3 = GTK_STRING_FILTER (gtk_string_filter_new ()); + filter1 = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); + filter2 = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); + filter3 = GTK_STRING_FILTER (gtk_string_filter_new (NULL)); filter1_expr = gtk_object_expression_new (G_OBJECT (filter1)); filter2_expr = gtk_object_expression_new (G_OBJECT (filter2)); @@ -693,7 +693,7 @@ test_bind_object (void) GtkFilterListModel *model; GtkExpression *expr; - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); store = g_list_store_new (G_TYPE_OBJECT); model = gtk_filter_list_model_new (G_LIST_MODEL (store), NULL); diff --git a/testsuite/gtk/filter.c b/testsuite/gtk/filter.c index 5c5fd707c7..09b2ca346d 100644 --- a/testsuite/gtk/filter.c +++ b/testsuite/gtk/filter.c @@ -249,16 +249,13 @@ test_string_simple (void) { GtkFilterListModel *model; GtkFilter *filter; - GtkExpression *expr; - expr = gtk_cclosure_expression_new (G_TYPE_STRING, - NULL, - 0, NULL, - G_CALLBACK (get_string), - NULL, NULL); - - filter = gtk_string_filter_new (); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), expr); + filter = gtk_string_filter_new ( + gtk_cclosure_expression_new (G_TYPE_STRING, + NULL, + 0, NULL, + G_CALLBACK (get_string), + NULL, NULL)); model = new_model (20, filter); assert_model (model, "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20"); @@ -268,7 +265,6 @@ test_string_simple (void) g_object_unref (model); g_object_unref (filter); - gtk_expression_unref (expr); } static void @@ -276,16 +272,13 @@ test_string_properties (void) { GtkFilterListModel *model; GtkFilter *filter; - GtkExpression *expr; - expr = gtk_cclosure_expression_new (G_TYPE_STRING, - NULL, - 0, NULL, - G_CALLBACK (get_spelled_out), - NULL, NULL); - - filter = gtk_string_filter_new (); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), expr); + filter = gtk_string_filter_new ( + gtk_cclosure_expression_new (G_TYPE_STRING, + NULL, + 0, NULL, + G_CALLBACK (get_spelled_out), + NULL, NULL)); model = new_model (1000, filter); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "thirte"); @@ -311,7 +304,6 @@ test_string_properties (void) g_object_unref (model); g_object_unref (filter); - gtk_expression_unref (expr); } static void diff --git a/testsuite/gtk/filterlistmodel-exhaustive.c b/testsuite/gtk/filterlistmodel-exhaustive.c index 4bf54c1d57..76d2a9dd4c 100644 --- a/testsuite/gtk/filterlistmodel-exhaustive.c +++ b/testsuite/gtk/filterlistmodel-exhaustive.c @@ -206,17 +206,16 @@ static GtkFilter * create_filter (gsize id) { GtkFilter *filter; - GtkExpression *expr; switch (id) { case 0: /* GTK_FILTER_MATCH_ALL */ - return gtk_string_filter_new (); + return gtk_string_filter_new (NULL); case 1: /* GTK_FILTER_MATCH_NONE */ - filter = gtk_string_filter_new (); + filter = gtk_string_filter_new (NULL); gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "does not matter, because no expression"); return filter; @@ -224,10 +223,7 @@ create_filter (gsize id) case 3: case 4: /* match all As, Bs and nothing */ - filter = gtk_string_filter_new (); - expr = gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string"); - gtk_string_filter_set_expression (GTK_STRING_FILTER (filter), expr); - gtk_expression_unref (expr); + filter = gtk_string_filter_new (gtk_property_expression_new (GTK_TYPE_STRING_OBJECT, NULL, "string")); if (id == 2) gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "A"); else if (id == 3)