[gtk+] GtkBuilder: Introduce some private helpers



commit c8446f43fdc1c5059204a3cbc7d8178683fe0c1a
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Apr 26 03:07:56 2015 -0400

    GtkBuilder: Introduce some private helpers
    
    Add functions that help reporting errors from builder
    subparsers consistently.

 gtk/gtkbuilder.c        |   60 +++++++++++++++++++++++++++++++++++++++++++++++
 gtk/gtkbuilderprivate.h |   13 ++++++++++
 2 files changed, 73 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 069106b..96b3347 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 fe619d4..d64fa10 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__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]