summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-05-13 19:37:51 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-05-13 19:46:29 -0400
commita1d9cb8ad66bdf0e9301a6c69ca9762f2497b288 (patch)
treec71f7f495db4ec628ed5a114b9da3fc9971feab7
parent78f68d7992b496b603356df8d13d9be76f5730a9 (diff)
downloadgtk+-a1d9cb8ad66bdf0e9301a6c69ca9762f2497b288.tar.gz
Add new css provider load apis
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.
-rw-r--r--gtk/gtkcssprovider.c54
-rw-r--r--gtk/gtkcssprovider.h8
2 files changed, 59 insertions, 3 deletions
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index e8e13f4ab1..280e349706 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -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));
}
diff --git a/gtk/gtkcssprovider.h b/gtk/gtkcssprovider.h
index 2b0085c1e3..f6e4939047 100644
--- a/gtk/gtkcssprovider.h
+++ b/gtk/gtkcssprovider.h
@@ -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);