builder: Parse PangoAttrList values
authorMatthias Clasen <mclasen@redhat.com>
Fri, 18 Nov 2022 15:37:42 +0000 (10:37 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 18 Nov 2022 15:42:50 +0000 (10:42 -0500)
Allow specifying PangoAttrList properties in the
serialized format supported by pango_attr_list_to_string().

Test included.

gtk/gtkbuilder.c
testsuite/gtk/ui/label6.expected [new file with mode: 0644]
testsuite/gtk/ui/label6.ui [new file with mode: 0644]

index 546e758b2e52d7b942df1c34c558efb7a3282cd2..36f3a1edcb2ae9bc3d7ce8197868fda88e53f6e5 100644 (file)
@@ -2325,6 +2325,23 @@ gtk_builder_value_from_string_type (GtkBuilder   *builder,
         {
           g_value_take_boxed (value, g_bytes_new (string, strlen (string)));
         }
+      else if (G_VALUE_HOLDS (value, PANGO_TYPE_ATTR_LIST))
+        {
+          PangoAttrList *attrs;
+
+          attrs = pango_attr_list_from_string (string);
+          if (attrs)
+            g_value_take_boxed (value, attrs);
+          else
+            {
+              g_set_error (error,
+                           GTK_BUILDER_ERROR,
+                           GTK_BUILDER_ERROR_INVALID_VALUE,
+                           "Could not parse PangoAttrList '%s'",
+                           string);
+              ret = FALSE;
+            }
+        }
       else
         {
           g_set_error (error,
diff --git a/testsuite/gtk/ui/label6.expected b/testsuite/gtk/ui/label6.expected
new file mode 100644 (file)
index 0000000..ff43ca4
--- /dev/null
@@ -0,0 +1 @@
+SUCCESS
diff --git a/testsuite/gtk/ui/label6.ui b/testsuite/gtk/ui/label6.ui
new file mode 100644 (file)
index 0000000..a639d7b
--- /dev/null
@@ -0,0 +1,25 @@
+<!-- test all valid label attributes -->
+<interface>
+  <object class="GtkLabel">
+    <property name="attributes">
+      5 10 language de
+      0 -1 style italic
+      0 -1 weight bold
+      0 -1 variant normal
+      0 -1 stretch ultra-expanded
+      0 -1 underline double
+      0 -1 strikethrough true
+      0 -1 gravity north
+      0 -1 gravity-hint line
+      0 -1 family "sans"
+      0 -1 size 10
+      0 -1 absolute-size 10
+      0 -1 font-desc "Cantarell 11"
+      0 -1 foreground yellow
+      0 -1 background red
+      0 -1 underline-color green
+      0 -1 strikethrough-color purple
+      0 -1 scale 1.5
+    </property>
+  </object>
+</interface>