diff options
author | Benjamin Otte <otte@redhat.com> | 2015-11-16 17:36:50 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2015-11-16 17:39:15 +0100 |
commit | 0a4e88b79b9fa20ae0bd61ff68e99abeb5753da3 (patch) | |
tree | 686e75c7c5f6a7aa07ac4fbe5fea372e9c5c1b4d /gtk/gtkcssprovider.c | |
parent | 81cb57b260b22ab2e1a0cb2b29c7c09fd3de128c (diff) | |
download | gtk+-0a4e88b79b9fa20ae0bd61ff68e99abeb5753da3.tar.gz |
cssprovider: Have a section on import error
When loading a nonexisting CSS file using
gtk_css_provider_load_from_file() or gtk_css_provider_load_from_path()
we would emit the error using a NULL scanner. Don't do that, because
we'll have a NULL section in that case and error handlers don't like
that.
Testcase attached.
https://bugzilla.redhat.com/show_bug.cgi?id=1277959
Diffstat (limited to 'gtk/gtkcssprovider.c')
-rw-r--r-- | gtk/gtkcssprovider.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 50108c39e5..fbe9163dfd 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1943,6 +1943,9 @@ gtk_css_provider_error (GtkCssProvider *provider, GError *error; va_list args; + gtk_internal_return_if_fail (GTK_IS_CSS_PROVIDER (provider)); + gtk_internal_return_if_fail (scanner != NULL); + va_start (args, format); error = g_error_new_valist (domain, code, format, args); va_end (args); @@ -2725,21 +2728,24 @@ gtk_css_provider_load_internal (GtkCssProvider *css_provider, } else { - GtkCssSection *section; - - if (parent) - section = gtk_css_section_ref (parent->section); - else - section = _gtk_css_section_new_for_file (GTK_CSS_SECTION_DOCUMENT, file); + scanner = gtk_css_scanner_new (css_provider, + parent, + parent ? parent->section : NULL, + file, + ""); + + gtk_css_scanner_push_section (scanner, GTK_CSS_SECTION_DOCUMENT); gtk_css_provider_error (css_provider, - parent, + scanner, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_IMPORT, "Failed to import: %s", load_error->message); - gtk_css_section_unref (section); + gtk_css_scanner_pop_section (scanner, GTK_CSS_SECTION_DOCUMENT); + + gtk_css_scanner_destroy (scanner); } } |