From a1d9cb8ad66bdf0e9301a6c69ca9762f2497b288 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 13 May 2023 19:37:51 -0400 Subject: 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. --- gtk/gtkcssprovider.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++--- gtk/gtkcssprovider.h | 8 ++++++++ 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); -- cgit v1.2.1