summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2022-04-19 03:51:16 +0000
committerMatthias Clasen <mclasen@redhat.com>2022-04-19 03:51:16 +0000
commit8e28b0765ca8335bb14011325a99712f4a3a21b7 (patch)
treeaf2a9b6f8ac3efbea784d056a8287985803359f4
parent1cc2b96e6bcbb5f2503953ff05e7c095d035b506 (diff)
parentc882a611c85bc8ac32b2eef4d44b160aeab619b0 (diff)
downloadgtk+-8e28b0765ca8335bb14011325a99712f4a3a21b7.tar.gz
Merge branch 'file-filter-fix' into 'main'
Fix file filter buildable support Closes #4787 See merge request GNOME/gtk!4652
-rw-r--r--gtk/gtkfilefilter.c2
-rw-r--r--testsuite/gtk/filefilter.c39
2 files changed, 40 insertions, 1 deletions
diff --git a/gtk/gtkfilefilter.c b/gtk/gtkfilefilter.c
index c9a4d3040a..f9c7627615 100644
--- a/gtk/gtkfilefilter.c
+++ b/gtk/gtkfilefilter.c
@@ -339,7 +339,7 @@ parser_end_element (GtkBuildableParseContext *context,
{
SubParserData *data = (SubParserData*)user_data;
- if (data->string)
+ if (data->string && data->parsing)
{
switch (data->type)
{
diff --git a/testsuite/gtk/filefilter.c b/testsuite/gtk/filefilter.c
index 6cb659fec7..f32801bde4 100644
--- a/testsuite/gtk/filefilter.c
+++ b/testsuite/gtk/filefilter.c
@@ -116,6 +116,44 @@ test_mime_type (void)
g_object_unref (filter);
}
+static void
+test_buildable (void)
+{
+ GtkBuilder *builder;
+ const char *buffer =
+ "<interface>\n"
+ "<object class=\"GtkFileFilter\" id=\"filter\">\n"
+ "<property name=\"name\">Audio Files</property>\n"
+ "<mime-types>\n"
+ "<mime-type>audio/*</mime-type>\n"
+ "</mime-types>\n"
+ "</object>\n"
+ "</interface>";
+ GtkFileFilter *filter;
+ GVariant *v1, *v2;
+ char *s1, *s2;
+
+ builder = gtk_builder_new ();
+ gtk_builder_add_from_string (builder, buffer, strlen (buffer), NULL);
+ filter = GTK_FILE_FILTER (gtk_builder_get_object (builder, "filter"));
+
+ v1 = gtk_file_filter_to_gvariant (filter);
+ v2 = g_variant_parse (NULL, "('Audio Files', [(1, 'audio/*')])", NULL, NULL, NULL);
+
+ s1 = g_variant_print (v1, FALSE);
+ s2 = g_variant_print (v2, FALSE);
+
+ g_assert_true (strcmp (s1, s2) == 0);
+
+ g_free (s1);
+ g_free (s2);
+
+ g_variant_unref (v1);
+ g_variant_unref (v2);
+
+ g_object_unref (builder);
+}
+
int
main (int argc, char *argv[])
{
@@ -126,6 +164,7 @@ main (int argc, char *argv[])
g_test_add_func ("/filefilter/pattern", test_pattern);
g_test_add_func ("/filefilter/suffix", test_suffix);
g_test_add_func ("/filefilter/mimetype", test_mime_type);
+ g_test_add_func ("/filefilter/buildable", test_buildable);
return g_test_run ();
}