forked from AuroraMiddleware/gtk
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).
This commit is contained in:
parent
63bf90ae71
commit
2c7fdf6432
@ -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,
|
||||
@ -405,13 +408,22 @@ gtk_css_scanner_destroy (GtkCssScanner *scanner)
|
||||
g_slice_free (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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user