From: Matthias Clasen Date: Fri, 6 May 2022 13:23:31 +0000 (-0400) Subject: builder: Allow checking for multiple parents X-Git-Tag: archive/raspbian/4.8.3+ds-2+rpi1~3^2~20^2~4^2~218^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f880d24f2a74d6b6a14d178deeb2b0e94f8e5f65;p=gtk4.git builder: Allow checking for multiple parents --- 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,