[gtk+] CSS provider: Add a way to emit errors



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]