diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-04-26 03:07:56 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-04-27 01:15:21 -0400 |
commit | c8446f43fdc1c5059204a3cbc7d8178683fe0c1a (patch) | |
tree | 3c15fd35e63ff9561fada80ddca2fabee344f47c | |
parent | 44bf00d5dad70eeda35ac6b889e281af3ec3029e (diff) | |
download | gtk+-c8446f43fdc1c5059204a3cbc7d8178683fe0c1a.tar.gz |
GtkBuilder: Introduce some private helpers
Add functions that help reporting errors from builder
subparsers consistently.
-rw-r--r-- | gtk/gtkbuilder.c | 60 | ||||
-rw-r--r-- | gtk/gtkbuilderprivate.h | 13 |
2 files changed, 73 insertions, 0 deletions
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index 069106b3f5..96b33478ca 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -2606,3 +2606,63 @@ gtk_builder_get_application (GtkBuilder *builder) return builder->priv->application; } + +void +_gtk_builder_prefix_error (GtkBuilder *builder, + GMarkupParseContext *context, + GError **error) +{ + gint line, col; + + g_markup_parse_context_get_position (context, &line, &col); + g_prefix_error (error, "%s:%d:%d ", builder->priv->filename, line, col); +} + +void +_gtk_builder_error_unhandled_tag (GtkBuilder *builder, + GMarkupParseContext *context, + const gchar *object, + const gchar *element_name, + GError **error) +{ + gint line, col; + + g_markup_parse_context_get_position (context, &line, &col); + g_set_error (error, + GTK_BUILDER_ERROR, + GTK_BUILDER_ERROR_UNHANDLED_TAG, + "%s:%d:%d Unsupported tag for %s: <%s>", + builder->priv->filename, line, col, + object, element_name); +} + +gboolean +_gtk_builder_check_parent (GtkBuilder *builder, + GMarkupParseContext *context, + const gchar *parent_name, + GError **error) +{ + const GSList *stack; + gint line, col; + const gchar *parent; + const gchar *element; + + stack = g_markup_parse_context_get_element_stack (context); + + element = (const gchar *)stack->data; + parent = stack->next ? (const gchar *)stack->next->data : ""; + + if (g_str_equal (parent_name, parent) || + (g_str_equal (parent_name, "object") && g_str_equal (parent, "template"))) + return TRUE; + + g_markup_parse_context_get_position (context, &line, &col); + g_set_error (error, + GTK_BUILDER_ERROR, + GTK_BUILDER_ERROR_INVALID_TAG, + "%s:%d:%d Can't use <%s> here", + builder->priv->filename, line, col, element); + + return FALSE; +} + diff --git a/gtk/gtkbuilderprivate.h b/gtk/gtkbuilderprivate.h index fe619d4974..d64fa10cb7 100644 --- a/gtk/gtkbuilderprivate.h +++ b/gtk/gtkbuilderprivate.h @@ -185,4 +185,17 @@ guint _gtk_builder_extend_with_template (GtkBuilder *builder, gsize length, GError **error); +void _gtk_builder_prefix_error (GtkBuilder *builder, + GMarkupParseContext *context, + GError **error); +void _gtk_builder_error_unhandled_tag (GtkBuilder *builder, + GMarkupParseContext *context, + const gchar *object, + const gchar *element_name, + GError **error); +gboolean _gtk_builder_check_parent (GtkBuilder *builder, + GMarkupParseContext *context, + const gchar *parent_name, + GError **error); + #endif /* __GTK_BUILDER_PRIVATE_H__ */ |