Fix file filter buildable support
authorMatthias Clasen <mclasen@redhat.com>
Tue, 19 Apr 2022 03:03:15 +0000 (23:03 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 21 Apr 2022 23:27:37 +0000 (19:27 -0400)
File filters creates from ui files had some
extraneous gunk in them. Fix that. Test included.

Fixes: #4787
gtk/gtkfilefilter.c
testsuite/gtk/filefilter.c

index c9a4d3040abdf06c8d02451d0f13293faafed2b3..f9c7627615988d058e3cf7cdc59159554271eebc 100644 (file)
@@ -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)
         {
index 6cb659fec7e3926b2119356910f2e09a6dc21fff..f32801bde4838523651a8776fb03f7af93cee24b 100644 (file)
@@ -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 ();
 }