Add new css provider load apis
authorMatthias Clasen <mclasen@redhat.com>
Sat, 13 May 2023 23:37:51 +0000 (19:37 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 13 May 2023 23:46:29 +0000 (19:46 -0400)
gtk_css_provider_load_from_data has turned out
to be problematic for language bindings. Add two
new variants, from_string and from_bytes, to
replace it.

gtk/gtkcssprovider.c
gtk/gtkcssprovider.h

index e8e13f4ab1846499d0fe6d73e9485298c87dd025..280e349706ef72aa2036a574d12c252a642b593f 100644 (file)
@@ -1111,11 +1111,59 @@ gtk_css_provider_load_from_data (GtkCssProvider  *css_provider,
 
   bytes = g_bytes_new_static (data, length);
 
-  gtk_css_provider_reset (css_provider);
+  gtk_css_provider_load_from_bytes (css_provider, bytes);
+
+  g_bytes_unref (bytes);
+}
+
+/**
+ * gtk_css_provider_load_from_string:
+ * @css_provider: a `GtkCssProvider`
+ * @string: the CSS to load
+ *
+ * Loads @string into @css_provider.
+ *
+ * This clears any previously loaded information.
+ *
+ * Since: 4.12
+ */
+void
+gtk_css_provider_load_from_string (GtkCssProvider *css_provider,
+                                   const char     *string)
+{
+  GBytes *bytes;
+
+  g_return_if_fail (GTK_IS_CSS_PROVIDER (css_provider));
+  g_return_if_fail (string != NULL);
+
+  bytes = g_bytes_new_static (string, strlen (string));
+
+  gtk_css_provider_load_from_bytes (css_provider, bytes);
 
-  g_bytes_ref (bytes);
-  gtk_css_provider_load_internal (css_provider, NULL, NULL, bytes);
   g_bytes_unref (bytes);
+}
+
+/**
+ * gtk_css_provider_load_from_bytes:
+ * @css_provider: a `GtkCssProvider`
+ * @data: `GBytes` containing the data to load
+ *
+ * Loads @data into @css_provider.
+ *
+ * This clears any previously loaded information.
+ *
+ * Since: 4.12
+ */
+void
+gtk_css_provider_load_from_bytes (GtkCssProvider *css_provider,
+                                  GBytes         *data)
+{
+  g_return_if_fail (GTK_IS_CSS_PROVIDER (css_provider));
+  g_return_if_fail (data != NULL);
+
+  gtk_css_provider_reset (css_provider);
+
+  gtk_css_provider_load_internal (css_provider, NULL, NULL, g_bytes_ref (data));
 
   gtk_style_provider_changed (GTK_STYLE_PROVIDER (css_provider));
 }
index 2b0085c1e3bc45f9239452feda7eb08e9e02413b..f6e4939047fdb8f3516c7eb8a64fd873a242ebb2 100644 (file)
@@ -49,6 +49,14 @@ GDK_AVAILABLE_IN_ALL
 void             gtk_css_provider_load_from_data (GtkCssProvider  *css_provider,
                                                   const char      *data,
                                                   gssize           length);
+GDK_AVAILABLE_IN_4_12
+void             gtk_css_provider_load_from_string (GtkCssProvider *css_provider,
+                                                    const char     *string);
+
+GDK_AVAILABLE_IN_4_12
+void             gtk_css_provider_load_from_bytes  (GtkCssProvider *css_provider,
+                                                    GBytes         *data);
+
 GDK_AVAILABLE_IN_ALL
 void             gtk_css_provider_load_from_file (GtkCssProvider  *css_provider,
                                                   GFile           *file);