[gtk+] CSS provider: Add a way to emit errors
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] CSS provider: Add a way to emit errors
- Date: Sat, 30 Jan 2016 05:29:18 +0000 (UTC)
commit 2c7fdf6432057849bdf7ee9aaf71c328a39bd5a8
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jan 29 22:45:21 2016 -0500
CSS provider: Add a way to emit errors
Currently, GtkCssProvider can emit ::parsing-error only during
the actual parsing, although the documentation hints that it might
happen at other times.
This commit adds a emit_error method to the GtkStyleProviderPrivate
interface that will let us emit errors from the compute() implementations
as well, which can be useful (e.g. if an image fails to load).
gtk/gtkcssprovider.c | 26 +++++++++++++++++---------
gtk/gtkstyleproviderprivate.c | 13 +++++++++++++
gtk/gtkstyleproviderprivate.h | 8 +++++++-
3 files changed, 37 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index f60a0bf..1c192c7 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -142,6 +142,9 @@ static void gtk_css_provider_finalize (GObject *object);
static void gtk_css_style_provider_iface_init (GtkStyleProviderIface *iface);
static void gtk_css_style_provider_private_iface_init (GtkStyleProviderPrivateInterface *iface);
static void widget_property_value_list_free (WidgetPropertyValue *head);
+static void gtk_css_style_provider_emit_error (GtkStyleProviderPrivate *provider,
+ GtkCssSection *section,
+ const GError *error);
static gboolean
gtk_css_provider_load_internal (GtkCssProvider *css_provider,
@@ -406,12 +409,21 @@ gtk_css_scanner_destroy (GtkCssScanner *scanner)
}
static void
+gtk_css_style_provider_emit_error (GtkStyleProviderPrivate *provider,
+ GtkCssSection *section,
+ const GError *error)
+{
+ g_signal_emit (provider, css_provider_signals[PARSING_ERROR], 0, section, error);
+}
+
+static void
gtk_css_provider_emit_error (GtkCssProvider *provider,
GtkCssScanner *scanner,
const GError *error)
{
- g_signal_emit (provider, css_provider_signals[PARSING_ERROR], 0,
- scanner != NULL ? scanner->section : NULL, error);
+ gtk_css_style_provider_emit_error (GTK_STYLE_PROVIDER_PRIVATE (provider),
+ scanner ? scanner->section : NULL,
+ error);
}
static void
@@ -421,9 +433,7 @@ gtk_css_scanner_parser_error (GtkCssParser *parser,
{
GtkCssScanner *scanner = user_data;
- gtk_css_provider_emit_error (scanner->provider,
- scanner,
- error);
+ gtk_css_provider_emit_error (scanner->provider, scanner, error);
}
static GtkCssScanner *
@@ -785,6 +795,7 @@ gtk_css_style_provider_private_iface_init (GtkStyleProviderPrivateInterface *ifa
iface->get_color = gtk_css_style_provider_get_color;
iface->get_keyframes = gtk_css_style_provider_get_keyframes;
iface->lookup = gtk_css_style_provider_lookup;
+ iface->emit_error = gtk_css_style_provider_emit_error;
}
static void
@@ -834,10 +845,7 @@ gtk_css_provider_take_error (GtkCssProvider *provider,
GtkCssScanner *scanner,
GError *error)
{
- gtk_css_provider_emit_error (provider,
- scanner,
- error);
-
+ gtk_css_provider_emit_error (provider, scanner, error);
g_error_free (error);
}
diff --git a/gtk/gtkstyleproviderprivate.c b/gtk/gtkstyleproviderprivate.c
index dbf6e3c..8779f1e 100644
--- a/gtk/gtkstyleproviderprivate.c
+++ b/gtk/gtkstyleproviderprivate.c
@@ -142,3 +142,16 @@ _gtk_style_provider_private_get_scale (GtkStyleProviderPrivate *provider)
return iface->get_scale (provider);
}
+
+void
+_gtk_style_provider_private_emit_error (GtkStyleProviderPrivate *provider,
+ GtkCssSection *section,
+ GError *error)
+{
+ GtkStyleProviderPrivateInterface *iface;
+
+ iface = GTK_STYLE_PROVIDER_PRIVATE_GET_INTERFACE (provider);
+
+ if (iface->emit_error)
+ iface->emit_error (provider, section, error);
+}
diff --git a/gtk/gtkstyleproviderprivate.h b/gtk/gtkstyleproviderprivate.h
index ff58b9e..086119c 100644
--- a/gtk/gtkstyleproviderprivate.h
+++ b/gtk/gtkstyleproviderprivate.h
@@ -49,7 +49,9 @@ struct _GtkStyleProviderPrivateInterface
const GtkCssMatcher *matcher,
GtkCssLookup *lookup,
GtkCssChange *out_change);
-
+ void (* emit_error) (GtkStyleProviderPrivate *provider,
+ GtkCssSection *section,
+ const GError *error);
/* signal */
void (* changed) (GtkStyleProviderPrivate *provider);
};
@@ -69,6 +71,10 @@ void _gtk_style_provider_private_lookup (GtkStyleProvid
void _gtk_style_provider_private_changed (GtkStyleProviderPrivate *provider);
+void _gtk_style_provider_private_emit_error (GtkStyleProviderPrivate *provider,
+ GtkCssSection *section,
+ GError *error);
+
G_END_DECLS
#endif /* __GTK_STYLE_PROVIDER_PRIVATE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]