summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-04-26 03:07:56 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-04-27 01:15:21 -0400
commitc8446f43fdc1c5059204a3cbc7d8178683fe0c1a (patch)
tree3c15fd35e63ff9561fada80ddca2fabee344f47c
parent44bf00d5dad70eeda35ac6b889e281af3ec3029e (diff)
downloadgtk+-c8446f43fdc1c5059204a3cbc7d8178683fe0c1a.tar.gz
GtkBuilder: Introduce some private helpers
Add functions that help reporting errors from builder subparsers consistently.
-rw-r--r--gtk/gtkbuilder.c60
-rw-r--r--gtk/gtkbuilderprivate.h13
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__ */