[gtk/builder-treestore-data: 4/6] builder: Allow checking for multiple parents
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/builder-treestore-data: 4/6] builder: Allow checking for multiple parents
- Date: Fri, 6 May 2022 13:29:53 +0000 (UTC)
commit f880d24f2a74d6b6a14d178deeb2b0e94f8e5f65
Author: Matthias Clasen <mclasen redhat com>
Date: Fri May 6 09:23:31 2022 -0400
builder: Allow checking for multiple parents
gtk/gtkbuilder.c | 32 +++++++++++++++++++++++++++++---
gtk/gtkbuilderprivate.h | 4 ++++
2 files changed, 33 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 545699c45c..ec9fa6f913 100644
--- a/gtk/gtkbuilder.c
+++ b/gtk/gtkbuilder.c
@@ -2996,21 +2996,47 @@ _gtk_builder_check_parent (GtkBuilder *builder,
GtkBuildableParseContext *context,
const char *parent_name,
GError **error)
+{
+ return _gtk_builder_check_parents (builder, context, error, parent_name, NULL);
+}
+
+gboolean
+_gtk_builder_check_parents (GtkBuilder *builder,
+ GtkBuildableParseContext *context,
+ GError **error,
+ ...)
{
GtkBuilderPrivate *priv = gtk_builder_get_instance_private (builder);
GPtrArray *stack;
int line, col;
const char *parent;
const char *element;
+ va_list args;
+ gboolean in_template;
stack = gtk_buildable_parse_context_get_element_stack (context);
element = g_ptr_array_index (stack, stack->len - 1);
parent = stack->len > 1 ? g_ptr_array_index (stack, stack->len - 2) : "";
- if (g_str_equal (parent_name, parent) ||
- (g_str_equal (parent_name, "object") && g_str_equal (parent, "template")))
- return TRUE;
+ in_template = g_str_equal (parent, "template");
+
+ va_start (args, error);
+
+ while (1) {
+ char *parent_name = va_arg (args, char *);
+
+ if (parent_name == NULL)
+ break;
+
+ if (g_str_equal (parent_name, parent) || (in_template && g_str_equal (parent_name, "object")))
+ {
+ va_end (args);
+ return TRUE;
+ }
+ }
+
+ va_end (args);
gtk_buildable_parse_context_get_position (context, &line, &col);
g_set_error (error,
diff --git a/gtk/gtkbuilderprivate.h b/gtk/gtkbuilderprivate.h
index e99b7163e6..21ceca77c0 100644
--- a/gtk/gtkbuilderprivate.h
+++ b/gtk/gtkbuilderprivate.h
@@ -278,6 +278,10 @@ gboolean _gtk_builder_check_parent (GtkBuilder *builder,
GtkBuildableParseContext *context,
const char *parent_name,
GError **error);
+gboolean _gtk_builder_check_parents (GtkBuilder *builder,
+ GtkBuildableParseContext *context,
+ GError **error,
+ ...);
GObject *gtk_builder_lookup_object (GtkBuilder *builder,
const char *name,
int line,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]