/* controller-hint-policy.c generated by valac 0.56.19, the Vala compiler
 * generated from controller-hint-policy.vala, do not modify */

#include "protonplus_core.h"
#include <glib.h>
#include <glib-object.h>
#include <SDL3/SDL_gamepad.h>
#include <string.h>

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

enum  {
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_NUM_PROPERTIES];
enum  {
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NUM_PROPERTIES];
enum  {
	PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_prompt_button_labels_properties[PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_NUM_PROPERTIES];
enum  {
	PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
enum  {
	PROTON_PLUS_UTILS_CONTROLLER_HINT_POLICY_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_HINT_POLICY_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_hint_policy_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_POLICY_NUM_PROPERTIES];
enum  {
	PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_LABEL_RESOLVER_0_PROPERTY,
	PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_LABEL_RESOLVER_NUM_PROPERTIES
};
static GParamSpec* proton_plus_utils_controller_physical_label_resolver_properties[PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_LABEL_RESOLVER_NUM_PROPERTIES];

struct _ProtonPlusUtilsControllerHintContextPrivate {
	gboolean _controller_mode_active;
	gboolean _has_dialog;
	gboolean _has_popover;
	ProtonPlusUtilsControllerHintControlKind _control_kind;
	gboolean _can_navigate_back;
	gboolean _can_exit;
	gboolean _can_switch_section;
	gboolean _can_open_search;
	gboolean _can_open_filter;
};

struct _ProtonPlusUtilsControllerFaceButtonLabelFactsPrivate {
	ProtonPlusUtilsControllerPhysicalButtonLabel _south;
	ProtonPlusUtilsControllerPhysicalButtonLabel _east;
	ProtonPlusUtilsControllerPhysicalButtonLabel _west;
	ProtonPlusUtilsControllerPhysicalButtonLabel _north;
};

struct _ProtonPlusUtilsControllerPromptButtonLabelsPrivate {
	ProtonPlusUtilsControllerPhysicalButtonLabel _confirm;
	ProtonPlusUtilsControllerPhysicalButtonLabel _back;
};

struct _ProtonPlusUtilsControllerPresentationStatePrivate {
	gboolean _controller_mode_active;
	ProtonPlusUtilsControllerHintKind* hint_values;
	gint hint_values_length1;
	gint _hint_values_size_;
	ProtonPlusUtilsControllerFaceButtonLabelFacts* _face_labels;
	ProtonPlusUtilsControllerPromptButtonLabels* _prompt_labels;
};

static gint ProtonPlusUtilsControllerHintContext_private_offset;
static gpointer proton_plus_utils_controller_hint_context_parent_class = NULL;
static gint ProtonPlusUtilsControllerFaceButtonLabelFacts_private_offset;
static gpointer proton_plus_utils_controller_face_button_label_facts_parent_class = NULL;
static gint ProtonPlusUtilsControllerPromptButtonLabels_private_offset;
static gpointer proton_plus_utils_controller_prompt_button_labels_parent_class = NULL;
static gint ProtonPlusUtilsControllerPresentationState_private_offset;
static gpointer proton_plus_utils_controller_presentation_state_parent_class = NULL;
static gpointer proton_plus_utils_controller_hint_policy_parent_class = NULL;
static gpointer proton_plus_utils_controller_physical_label_resolver_parent_class = NULL;

static void proton_plus_utils_controller_hint_context_finalize (GObject * obj);
static GType proton_plus_utils_controller_hint_context_get_type_once (void);
static void _vala_proton_plus_utils_controller_hint_context_get_property (GObject * object,
                                                                   guint property_id,
                                                                   GValue * value,
                                                                   GParamSpec * pspec);
static void _vala_proton_plus_utils_controller_hint_context_set_property (GObject * object,
                                                                   guint property_id,
                                                                   const GValue * value,
                                                                   GParamSpec * pspec);
static void proton_plus_utils_controller_face_button_label_facts_set_south (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                     ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_face_button_label_facts_set_east (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                    ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_face_button_label_facts_set_west (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                    ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_face_button_label_facts_set_north (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                     ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_face_button_label_facts_finalize (GObject * obj);
static GType proton_plus_utils_controller_face_button_label_facts_get_type_once (void);
static void _vala_proton_plus_utils_controller_face_button_label_facts_get_property (GObject * object,
                                                                              guint property_id,
                                                                              GValue * value,
                                                                              GParamSpec * pspec);
static void _vala_proton_plus_utils_controller_face_button_label_facts_set_property (GObject * object,
                                                                              guint property_id,
                                                                              const GValue * value,
                                                                              GParamSpec * pspec);
static void proton_plus_utils_controller_prompt_button_labels_set_confirm (ProtonPlusUtilsControllerPromptButtonLabels* self,
                                                                    ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_prompt_button_labels_set_back (ProtonPlusUtilsControllerPromptButtonLabels* self,
                                                                 ProtonPlusUtilsControllerPhysicalButtonLabel value);
static void proton_plus_utils_controller_prompt_button_labels_finalize (GObject * obj);
static GType proton_plus_utils_controller_prompt_button_labels_get_type_once (void);
static void _vala_proton_plus_utils_controller_prompt_button_labels_get_property (GObject * object,
                                                                           guint property_id,
                                                                           GValue * value,
                                                                           GParamSpec * pspec);
static void _vala_proton_plus_utils_controller_prompt_button_labels_set_property (GObject * object,
                                                                           guint property_id,
                                                                           const GValue * value,
                                                                           GParamSpec * pspec);
static void proton_plus_utils_controller_presentation_state_set_controller_mode_active (ProtonPlusUtilsControllerPresentationState* self,
                                                                                 gboolean value);
static ProtonPlusUtilsControllerHintKind* _vala_array_dup54 (ProtonPlusUtilsControllerHintKind* self,
                                                      gssize length);
static void proton_plus_utils_controller_presentation_state_set_face_labels (ProtonPlusUtilsControllerPresentationState* self,
                                                                      ProtonPlusUtilsControllerFaceButtonLabelFacts* value);
static void proton_plus_utils_controller_presentation_state_set_prompt_labels (ProtonPlusUtilsControllerPresentationState* self,
                                                                        ProtonPlusUtilsControllerPromptButtonLabels* value);
static void proton_plus_utils_controller_presentation_state_finalize (GObject * obj);
static GType proton_plus_utils_controller_presentation_state_get_type_once (void);
static void _vala_proton_plus_utils_controller_presentation_state_get_property (GObject * object,
                                                                         guint property_id,
                                                                         GValue * value,
                                                                         GParamSpec * pspec);
static void _vala_proton_plus_utils_controller_presentation_state_set_property (GObject * object,
                                                                         guint property_id,
                                                                         const GValue * value,
                                                                         GParamSpec * pspec);
static void _vala_array_add8 (ProtonPlusUtilsControllerHintKind* * array,
                       gint* length,
                       gint* size,
                       ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add9 (ProtonPlusUtilsControllerHintKind* * array,
                       gint* length,
                       gint* size,
                       ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add10 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add11 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add12 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add13 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add14 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add15 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add16 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add17 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add18 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add19 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static void _vala_array_add20 (ProtonPlusUtilsControllerHintKind* * array,
                        gint* length,
                        gint* size,
                        ProtonPlusUtilsControllerHintKind value);
static GType proton_plus_utils_controller_hint_policy_get_type_once (void);
static ProtonPlusUtilsControllerPhysicalButtonLabel proton_plus_utils_controller_physical_label_resolver_map_sdl_label (SDL_GamepadButtonLabel label,
                                                                                                                 ProtonPlusUtilsControllerPhysicalButtonLabel fallback);
static GType proton_plus_utils_controller_physical_label_resolver_get_type_once (void);
static inline gpointer _vala_memdup2 (gconstpointer mem,
                        gsize byte_size);

static GType
proton_plus_utils_controller_hint_kind_get_type_once (void)
{
	static const GEnumValue values[] = {{PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SELECT, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SELECT", "select"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TOGGLE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TOGGLE", "toggle"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_OPEN, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_OPEN", "open"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_BACK, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_BACK", "back"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_EXIT, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_EXIT", "exit"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_CLOSE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_CLOSE", "close"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_HORIZONTAL, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_HORIZONTAL", "adjust-horizontal"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_VERTICAL, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_VERTICAL", "adjust-vertical"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TEXT_INPUT, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TEXT_INPUT", "text-input"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SWITCH_SECTION, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SWITCH_SECTION", "switch-section"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SEARCH, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SEARCH", "search"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_FILTER, "PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_FILTER", "filter"}, {0, NULL, NULL}};
	GType proton_plus_utils_controller_hint_kind_type_id;
	proton_plus_utils_controller_hint_kind_type_id = g_enum_register_static ("ProtonPlusUtilsControllerHintKind", values);
	return proton_plus_utils_controller_hint_kind_type_id;
}

GType
proton_plus_utils_controller_hint_kind_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_hint_kind_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_hint_kind_type_id__once)) {
		GType proton_plus_utils_controller_hint_kind_type_id;
		proton_plus_utils_controller_hint_kind_type_id = proton_plus_utils_controller_hint_kind_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_hint_kind_type_id__once, proton_plus_utils_controller_hint_kind_type_id);
	}
	return proton_plus_utils_controller_hint_kind_type_id__once;
}

static GType
proton_plus_utils_controller_hint_control_kind_get_type_once (void)
{
	static const GEnumValue values[] = {{PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_DEFAULT, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_DEFAULT", "default"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_TOGGLE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_TOGGLE", "toggle"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_OPEN, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_OPEN", "open"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_EDITABLE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_EDITABLE", "editable"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_HORIZONTAL_RANGE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_HORIZONTAL_RANGE", "horizontal-range"}, {PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_VERTICAL_RANGE, "PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_VERTICAL_RANGE", "vertical-range"}, {0, NULL, NULL}};
	GType proton_plus_utils_controller_hint_control_kind_type_id;
	proton_plus_utils_controller_hint_control_kind_type_id = g_enum_register_static ("ProtonPlusUtilsControllerHintControlKind", values);
	return proton_plus_utils_controller_hint_control_kind_type_id;
}

GType
proton_plus_utils_controller_hint_control_kind_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_hint_control_kind_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_hint_control_kind_type_id__once)) {
		GType proton_plus_utils_controller_hint_control_kind_type_id;
		proton_plus_utils_controller_hint_control_kind_type_id = proton_plus_utils_controller_hint_control_kind_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_hint_control_kind_type_id__once, proton_plus_utils_controller_hint_control_kind_type_id);
	}
	return proton_plus_utils_controller_hint_control_kind_type_id__once;
}

static GType
proton_plus_utils_controller_physical_button_label_get_type_once (void)
{
	static const GEnumValue values[] = {{PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_A, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_A", "a"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_B, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_B", "b"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_X, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_X", "x"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_Y, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_Y", "y"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CROSS, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CROSS", "cross"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CIRCLE, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CIRCLE", "circle"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_SQUARE, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_SQUARE", "square"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TRIANGLE, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TRIANGLE", "triangle"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_BOTTOM, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_BOTTOM", "bottom"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_RIGHT, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_RIGHT", "right"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_LEFT, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_LEFT", "left"}, {PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TOP, "PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TOP", "top"}, {0, NULL, NULL}};
	GType proton_plus_utils_controller_physical_button_label_type_id;
	proton_plus_utils_controller_physical_button_label_type_id = g_enum_register_static ("ProtonPlusUtilsControllerPhysicalButtonLabel", values);
	return proton_plus_utils_controller_physical_button_label_type_id;
}

GType
proton_plus_utils_controller_physical_button_label_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_physical_button_label_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_physical_button_label_type_id__once)) {
		GType proton_plus_utils_controller_physical_button_label_type_id;
		proton_plus_utils_controller_physical_button_label_type_id = proton_plus_utils_controller_physical_button_label_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_physical_button_label_type_id__once, proton_plus_utils_controller_physical_button_label_type_id);
	}
	return proton_plus_utils_controller_physical_button_label_type_id__once;
}

static inline gpointer
proton_plus_utils_controller_hint_context_get_instance_private (ProtonPlusUtilsControllerHintContext* self)
{
	return G_STRUCT_MEMBER_P (self, ProtonPlusUtilsControllerHintContext_private_offset);
}

ProtonPlusUtilsControllerHintContext*
proton_plus_utils_controller_hint_context_construct (GType object_type)
{
	ProtonPlusUtilsControllerHintContext * self = NULL;
	self = (ProtonPlusUtilsControllerHintContext*) g_object_new (object_type, NULL);
	return self;
}

ProtonPlusUtilsControllerHintContext*
proton_plus_utils_controller_hint_context_new (void)
{
	return proton_plus_utils_controller_hint_context_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_CONTEXT);
}

gboolean
proton_plus_utils_controller_hint_context_get_controller_mode_active (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_controller_mode_active;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_controller_mode_active (ProtonPlusUtilsControllerHintContext* self,
                                                                      gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_controller_mode_active (self);
	if (old_value != value) {
		self->priv->_controller_mode_active = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_has_dialog (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_has_dialog;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_has_dialog (ProtonPlusUtilsControllerHintContext* self,
                                                          gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_has_dialog (self);
	if (old_value != value) {
		self->priv->_has_dialog = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_has_popover (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_has_popover;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_has_popover (ProtonPlusUtilsControllerHintContext* self,
                                                           gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_has_popover (self);
	if (old_value != value) {
		self->priv->_has_popover = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY]);
	}
}

ProtonPlusUtilsControllerHintControlKind
proton_plus_utils_controller_hint_context_get_control_kind (ProtonPlusUtilsControllerHintContext* self)
{
	ProtonPlusUtilsControllerHintControlKind result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_control_kind;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_control_kind (ProtonPlusUtilsControllerHintContext* self,
                                                            ProtonPlusUtilsControllerHintControlKind value)
{
	ProtonPlusUtilsControllerHintControlKind old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_control_kind (self);
	if (old_value != value) {
		self->priv->_control_kind = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_can_navigate_back (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_can_navigate_back;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_can_navigate_back (ProtonPlusUtilsControllerHintContext* self,
                                                                 gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_can_navigate_back (self);
	if (old_value != value) {
		self->priv->_can_navigate_back = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_can_exit (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_can_exit;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_can_exit (ProtonPlusUtilsControllerHintContext* self,
                                                        gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_can_exit (self);
	if (old_value != value) {
		self->priv->_can_exit = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_can_switch_section (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_can_switch_section;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_can_switch_section (ProtonPlusUtilsControllerHintContext* self,
                                                                  gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_can_switch_section (self);
	if (old_value != value) {
		self->priv->_can_switch_section = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_can_open_search (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_can_open_search;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_can_open_search (ProtonPlusUtilsControllerHintContext* self,
                                                               gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_can_open_search (self);
	if (old_value != value) {
		self->priv->_can_open_search = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY]);
	}
}

gboolean
proton_plus_utils_controller_hint_context_get_can_open_filter (ProtonPlusUtilsControllerHintContext* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_can_open_filter;
	return result;
}

void
proton_plus_utils_controller_hint_context_set_can_open_filter (ProtonPlusUtilsControllerHintContext* self,
                                                               gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_hint_context_get_can_open_filter (self);
	if (old_value != value) {
		self->priv->_can_open_filter = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY]);
	}
}

static void
proton_plus_utils_controller_hint_context_class_init (ProtonPlusUtilsControllerHintContextClass * klass,
                                                      gpointer klass_data)
{
	proton_plus_utils_controller_hint_context_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &ProtonPlusUtilsControllerHintContext_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_proton_plus_utils_controller_hint_context_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_proton_plus_utils_controller_hint_context_set_property;
	G_OBJECT_CLASS (klass)->finalize = proton_plus_utils_controller_hint_context_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY] = g_param_spec_boolean ("controller-mode-active", "controller-mode-active", "controller-mode-active", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY] = g_param_spec_boolean ("has-dialog", "has-dialog", "has-dialog", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY] = g_param_spec_boolean ("has-popover", "has-popover", "has-popover", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY] = g_param_spec_enum ("control-kind", "control-kind", "control-kind", PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_CONTROL_KIND, PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_DEFAULT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY] = g_param_spec_boolean ("can-navigate-back", "can-navigate-back", "can-navigate-back", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY] = g_param_spec_boolean ("can-exit", "can-exit", "can-exit", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY] = g_param_spec_boolean ("can-switch-section", "can-switch-section", "can-switch-section", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY] = g_param_spec_boolean ("can-open-search", "can-open-search", "can-open-search", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY, proton_plus_utils_controller_hint_context_properties[PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY] = g_param_spec_boolean ("can-open-filter", "can-open-filter", "can-open-filter", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE));
}

static void
proton_plus_utils_controller_hint_context_instance_init (ProtonPlusUtilsControllerHintContext * self,
                                                         gpointer klass)
{
	self->priv = proton_plus_utils_controller_hint_context_get_instance_private (self);
	self->priv->_controller_mode_active = FALSE;
	self->priv->_has_dialog = FALSE;
	self->priv->_has_popover = FALSE;
	self->priv->_control_kind = PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_DEFAULT;
	self->priv->_can_navigate_back = FALSE;
	self->priv->_can_exit = FALSE;
	self->priv->_can_switch_section = FALSE;
	self->priv->_can_open_search = FALSE;
	self->priv->_can_open_filter = FALSE;
}

static void
proton_plus_utils_controller_hint_context_finalize (GObject * obj)
{
	ProtonPlusUtilsControllerHintContext * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_CONTEXT, ProtonPlusUtilsControllerHintContext);
	G_OBJECT_CLASS (proton_plus_utils_controller_hint_context_parent_class)->finalize (obj);
}

static GType
proton_plus_utils_controller_hint_context_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerHintContextClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_hint_context_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerHintContext), 0, (GInstanceInitFunc) proton_plus_utils_controller_hint_context_instance_init, NULL };
	GType proton_plus_utils_controller_hint_context_type_id;
	proton_plus_utils_controller_hint_context_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerHintContext", &g_define_type_info, 0);
	ProtonPlusUtilsControllerHintContext_private_offset = g_type_add_instance_private (proton_plus_utils_controller_hint_context_type_id, sizeof (ProtonPlusUtilsControllerHintContextPrivate));
	return proton_plus_utils_controller_hint_context_type_id;
}

GType
proton_plus_utils_controller_hint_context_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_hint_context_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_hint_context_type_id__once)) {
		GType proton_plus_utils_controller_hint_context_type_id;
		proton_plus_utils_controller_hint_context_type_id = proton_plus_utils_controller_hint_context_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_hint_context_type_id__once, proton_plus_utils_controller_hint_context_type_id);
	}
	return proton_plus_utils_controller_hint_context_type_id__once;
}

static void
_vala_proton_plus_utils_controller_hint_context_get_property (GObject * object,
                                                              guint property_id,
                                                              GValue * value,
                                                              GParamSpec * pspec)
{
	ProtonPlusUtilsControllerHintContext * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_CONTEXT, ProtonPlusUtilsControllerHintContext);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_controller_mode_active (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_has_dialog (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_has_popover (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_hint_context_get_control_kind (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_can_navigate_back (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_can_exit (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_can_switch_section (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_can_open_search (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_hint_context_get_can_open_filter (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_proton_plus_utils_controller_hint_context_set_property (GObject * object,
                                                              guint property_id,
                                                              const GValue * value,
                                                              GParamSpec * pspec)
{
	ProtonPlusUtilsControllerHintContext * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_CONTEXT, ProtonPlusUtilsControllerHintContext);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROLLER_MODE_ACTIVE_PROPERTY:
		proton_plus_utils_controller_hint_context_set_controller_mode_active (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_DIALOG_PROPERTY:
		proton_plus_utils_controller_hint_context_set_has_dialog (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_HAS_POPOVER_PROPERTY:
		proton_plus_utils_controller_hint_context_set_has_popover (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CONTROL_KIND_PROPERTY:
		proton_plus_utils_controller_hint_context_set_control_kind (self, g_value_get_enum (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_NAVIGATE_BACK_PROPERTY:
		proton_plus_utils_controller_hint_context_set_can_navigate_back (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_EXIT_PROPERTY:
		proton_plus_utils_controller_hint_context_set_can_exit (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_SWITCH_SECTION_PROPERTY:
		proton_plus_utils_controller_hint_context_set_can_switch_section (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_SEARCH_PROPERTY:
		proton_plus_utils_controller_hint_context_set_can_open_search (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTEXT_CAN_OPEN_FILTER_PROPERTY:
		proton_plus_utils_controller_hint_context_set_can_open_filter (self, g_value_get_boolean (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static inline gpointer
proton_plus_utils_controller_face_button_label_facts_get_instance_private (ProtonPlusUtilsControllerFaceButtonLabelFacts* self)
{
	return G_STRUCT_MEMBER_P (self, ProtonPlusUtilsControllerFaceButtonLabelFacts_private_offset);
}

ProtonPlusUtilsControllerFaceButtonLabelFacts*
proton_plus_utils_controller_face_button_label_facts_construct (GType object_type,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel south,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel east,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel west,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel north)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts * self = NULL;
	self = (ProtonPlusUtilsControllerFaceButtonLabelFacts*) g_object_new (object_type, NULL);
	proton_plus_utils_controller_face_button_label_facts_set_south (self, south);
	proton_plus_utils_controller_face_button_label_facts_set_east (self, east);
	proton_plus_utils_controller_face_button_label_facts_set_west (self, west);
	proton_plus_utils_controller_face_button_label_facts_set_north (self, north);
	return self;
}

ProtonPlusUtilsControllerFaceButtonLabelFacts*
proton_plus_utils_controller_face_button_label_facts_new (ProtonPlusUtilsControllerPhysicalButtonLabel south,
                                                          ProtonPlusUtilsControllerPhysicalButtonLabel east,
                                                          ProtonPlusUtilsControllerPhysicalButtonLabel west,
                                                          ProtonPlusUtilsControllerPhysicalButtonLabel north)
{
	return proton_plus_utils_controller_face_button_label_facts_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_FACE_BUTTON_LABEL_FACTS, south, east, west, north);
}

gboolean
proton_plus_utils_controller_face_button_label_facts_equal_to (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                               ProtonPlusUtilsControllerFaceButtonLabelFacts* other)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp3_;
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp4_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (other != NULL, FALSE);
	_tmp3_ = self->priv->_south;
	_tmp4_ = other->priv->_south;
	if (_tmp3_ == _tmp4_) {
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp5_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp6_;
		_tmp5_ = self->priv->_east;
		_tmp6_ = other->priv->_east;
		_tmp2_ = _tmp5_ == _tmp6_;
	} else {
		_tmp2_ = FALSE;
	}
	if (_tmp2_) {
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp7_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp8_;
		_tmp7_ = self->priv->_west;
		_tmp8_ = other->priv->_west;
		_tmp1_ = _tmp7_ == _tmp8_;
	} else {
		_tmp1_ = FALSE;
	}
	if (_tmp1_) {
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp9_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp10_;
		_tmp9_ = self->priv->_north;
		_tmp10_ = other->priv->_north;
		_tmp0_ = _tmp9_ == _tmp10_;
	} else {
		_tmp0_ = FALSE;
	}
	result = _tmp0_;
	return result;
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_face_button_label_facts_get_south (ProtonPlusUtilsControllerFaceButtonLabelFacts* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_south;
	return result;
}

static void
proton_plus_utils_controller_face_button_label_facts_set_south (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_face_button_label_facts_get_south (self);
	if (old_value != value) {
		self->priv->_south = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY]);
	}
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_face_button_label_facts_get_east (ProtonPlusUtilsControllerFaceButtonLabelFacts* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_east;
	return result;
}

static void
proton_plus_utils_controller_face_button_label_facts_set_east (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                               ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_face_button_label_facts_get_east (self);
	if (old_value != value) {
		self->priv->_east = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY]);
	}
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_face_button_label_facts_get_west (ProtonPlusUtilsControllerFaceButtonLabelFacts* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_west;
	return result;
}

static void
proton_plus_utils_controller_face_button_label_facts_set_west (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                               ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_face_button_label_facts_get_west (self);
	if (old_value != value) {
		self->priv->_west = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY]);
	}
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_face_button_label_facts_get_north (ProtonPlusUtilsControllerFaceButtonLabelFacts* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_north;
	return result;
}

static void
proton_plus_utils_controller_face_button_label_facts_set_north (ProtonPlusUtilsControllerFaceButtonLabelFacts* self,
                                                                ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_face_button_label_facts_get_north (self);
	if (old_value != value) {
		self->priv->_north = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY]);
	}
}

static void
proton_plus_utils_controller_face_button_label_facts_class_init (ProtonPlusUtilsControllerFaceButtonLabelFactsClass * klass,
                                                                 gpointer klass_data)
{
	proton_plus_utils_controller_face_button_label_facts_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &ProtonPlusUtilsControllerFaceButtonLabelFacts_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_proton_plus_utils_controller_face_button_label_facts_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_proton_plus_utils_controller_face_button_label_facts_set_property;
	G_OBJECT_CLASS (klass)->finalize = proton_plus_utils_controller_face_button_label_facts_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY] = g_param_spec_enum ("south", "south", "south", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY] = g_param_spec_enum ("east", "east", "east", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY] = g_param_spec_enum ("west", "west", "west", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY, proton_plus_utils_controller_face_button_label_facts_properties[PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY] = g_param_spec_enum ("north", "north", "north", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
}

static void
proton_plus_utils_controller_face_button_label_facts_instance_init (ProtonPlusUtilsControllerFaceButtonLabelFacts * self,
                                                                    gpointer klass)
{
	self->priv = proton_plus_utils_controller_face_button_label_facts_get_instance_private (self);
}

static void
proton_plus_utils_controller_face_button_label_facts_finalize (GObject * obj)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, PROTON_PLUS_UTILS_TYPE_CONTROLLER_FACE_BUTTON_LABEL_FACTS, ProtonPlusUtilsControllerFaceButtonLabelFacts);
	G_OBJECT_CLASS (proton_plus_utils_controller_face_button_label_facts_parent_class)->finalize (obj);
}

static GType
proton_plus_utils_controller_face_button_label_facts_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerFaceButtonLabelFactsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_face_button_label_facts_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerFaceButtonLabelFacts), 0, (GInstanceInitFunc) proton_plus_utils_controller_face_button_label_facts_instance_init, NULL };
	GType proton_plus_utils_controller_face_button_label_facts_type_id;
	proton_plus_utils_controller_face_button_label_facts_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerFaceButtonLabelFacts", &g_define_type_info, 0);
	ProtonPlusUtilsControllerFaceButtonLabelFacts_private_offset = g_type_add_instance_private (proton_plus_utils_controller_face_button_label_facts_type_id, sizeof (ProtonPlusUtilsControllerFaceButtonLabelFactsPrivate));
	return proton_plus_utils_controller_face_button_label_facts_type_id;
}

GType
proton_plus_utils_controller_face_button_label_facts_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_face_button_label_facts_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_face_button_label_facts_type_id__once)) {
		GType proton_plus_utils_controller_face_button_label_facts_type_id;
		proton_plus_utils_controller_face_button_label_facts_type_id = proton_plus_utils_controller_face_button_label_facts_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_face_button_label_facts_type_id__once, proton_plus_utils_controller_face_button_label_facts_type_id);
	}
	return proton_plus_utils_controller_face_button_label_facts_type_id__once;
}

static void
_vala_proton_plus_utils_controller_face_button_label_facts_get_property (GObject * object,
                                                                         guint property_id,
                                                                         GValue * value,
                                                                         GParamSpec * pspec)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_FACE_BUTTON_LABEL_FACTS, ProtonPlusUtilsControllerFaceButtonLabelFacts);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_face_button_label_facts_get_south (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_face_button_label_facts_get_east (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_face_button_label_facts_get_west (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_face_button_label_facts_get_north (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_proton_plus_utils_controller_face_button_label_facts_set_property (GObject * object,
                                                                         guint property_id,
                                                                         const GValue * value,
                                                                         GParamSpec * pspec)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_FACE_BUTTON_LABEL_FACTS, ProtonPlusUtilsControllerFaceButtonLabelFacts);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_SOUTH_PROPERTY:
		proton_plus_utils_controller_face_button_label_facts_set_south (self, g_value_get_enum (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_EAST_PROPERTY:
		proton_plus_utils_controller_face_button_label_facts_set_east (self, g_value_get_enum (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_WEST_PROPERTY:
		proton_plus_utils_controller_face_button_label_facts_set_west (self, g_value_get_enum (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_FACE_BUTTON_LABEL_FACTS_NORTH_PROPERTY:
		proton_plus_utils_controller_face_button_label_facts_set_north (self, g_value_get_enum (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static inline gpointer
proton_plus_utils_controller_prompt_button_labels_get_instance_private (ProtonPlusUtilsControllerPromptButtonLabels* self)
{
	return G_STRUCT_MEMBER_P (self, ProtonPlusUtilsControllerPromptButtonLabels_private_offset);
}

ProtonPlusUtilsControllerPromptButtonLabels*
proton_plus_utils_controller_prompt_button_labels_construct (GType object_type,
                                                             ProtonPlusUtilsControllerPhysicalButtonLabel confirm,
                                                             ProtonPlusUtilsControllerPhysicalButtonLabel back)
{
	ProtonPlusUtilsControllerPromptButtonLabels * self = NULL;
	self = (ProtonPlusUtilsControllerPromptButtonLabels*) g_object_new (object_type, NULL);
	proton_plus_utils_controller_prompt_button_labels_set_confirm (self, confirm);
	proton_plus_utils_controller_prompt_button_labels_set_back (self, back);
	return self;
}

ProtonPlusUtilsControllerPromptButtonLabels*
proton_plus_utils_controller_prompt_button_labels_new (ProtonPlusUtilsControllerPhysicalButtonLabel confirm,
                                                       ProtonPlusUtilsControllerPhysicalButtonLabel back)
{
	return proton_plus_utils_controller_prompt_button_labels_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_PROMPT_BUTTON_LABELS, confirm, back);
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_prompt_button_labels_get_confirm (ProtonPlusUtilsControllerPromptButtonLabels* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_confirm;
	return result;
}

static void
proton_plus_utils_controller_prompt_button_labels_set_confirm (ProtonPlusUtilsControllerPromptButtonLabels* self,
                                                               ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_prompt_button_labels_get_confirm (self);
	if (old_value != value) {
		self->priv->_confirm = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_prompt_button_labels_properties[PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY]);
	}
}

ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_prompt_button_labels_get_back (ProtonPlusUtilsControllerPromptButtonLabels* self)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	g_return_val_if_fail (self != NULL, 0);
	result = self->priv->_back;
	return result;
}

static void
proton_plus_utils_controller_prompt_button_labels_set_back (ProtonPlusUtilsControllerPromptButtonLabels* self,
                                                            ProtonPlusUtilsControllerPhysicalButtonLabel value)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_prompt_button_labels_get_back (self);
	if (old_value != value) {
		self->priv->_back = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_prompt_button_labels_properties[PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY]);
	}
}

static void
proton_plus_utils_controller_prompt_button_labels_class_init (ProtonPlusUtilsControllerPromptButtonLabelsClass * klass,
                                                              gpointer klass_data)
{
	proton_plus_utils_controller_prompt_button_labels_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &ProtonPlusUtilsControllerPromptButtonLabels_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_proton_plus_utils_controller_prompt_button_labels_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_proton_plus_utils_controller_prompt_button_labels_set_property;
	G_OBJECT_CLASS (klass)->finalize = proton_plus_utils_controller_prompt_button_labels_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY, proton_plus_utils_controller_prompt_button_labels_properties[PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY] = g_param_spec_enum ("confirm", "confirm", "confirm", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY, proton_plus_utils_controller_prompt_button_labels_properties[PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY] = g_param_spec_enum ("back", "back", "back", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_BUTTON_LABEL, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
}

static void
proton_plus_utils_controller_prompt_button_labels_instance_init (ProtonPlusUtilsControllerPromptButtonLabels * self,
                                                                 gpointer klass)
{
	self->priv = proton_plus_utils_controller_prompt_button_labels_get_instance_private (self);
}

static void
proton_plus_utils_controller_prompt_button_labels_finalize (GObject * obj)
{
	ProtonPlusUtilsControllerPromptButtonLabels * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PROMPT_BUTTON_LABELS, ProtonPlusUtilsControllerPromptButtonLabels);
	G_OBJECT_CLASS (proton_plus_utils_controller_prompt_button_labels_parent_class)->finalize (obj);
}

static GType
proton_plus_utils_controller_prompt_button_labels_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerPromptButtonLabelsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_prompt_button_labels_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerPromptButtonLabels), 0, (GInstanceInitFunc) proton_plus_utils_controller_prompt_button_labels_instance_init, NULL };
	GType proton_plus_utils_controller_prompt_button_labels_type_id;
	proton_plus_utils_controller_prompt_button_labels_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerPromptButtonLabels", &g_define_type_info, 0);
	ProtonPlusUtilsControllerPromptButtonLabels_private_offset = g_type_add_instance_private (proton_plus_utils_controller_prompt_button_labels_type_id, sizeof (ProtonPlusUtilsControllerPromptButtonLabelsPrivate));
	return proton_plus_utils_controller_prompt_button_labels_type_id;
}

GType
proton_plus_utils_controller_prompt_button_labels_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_prompt_button_labels_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_prompt_button_labels_type_id__once)) {
		GType proton_plus_utils_controller_prompt_button_labels_type_id;
		proton_plus_utils_controller_prompt_button_labels_type_id = proton_plus_utils_controller_prompt_button_labels_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_prompt_button_labels_type_id__once, proton_plus_utils_controller_prompt_button_labels_type_id);
	}
	return proton_plus_utils_controller_prompt_button_labels_type_id__once;
}

static void
_vala_proton_plus_utils_controller_prompt_button_labels_get_property (GObject * object,
                                                                      guint property_id,
                                                                      GValue * value,
                                                                      GParamSpec * pspec)
{
	ProtonPlusUtilsControllerPromptButtonLabels * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PROMPT_BUTTON_LABELS, ProtonPlusUtilsControllerPromptButtonLabels);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_prompt_button_labels_get_confirm (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY:
		g_value_set_enum (value, proton_plus_utils_controller_prompt_button_labels_get_back (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_proton_plus_utils_controller_prompt_button_labels_set_property (GObject * object,
                                                                      guint property_id,
                                                                      const GValue * value,
                                                                      GParamSpec * pspec)
{
	ProtonPlusUtilsControllerPromptButtonLabels * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PROMPT_BUTTON_LABELS, ProtonPlusUtilsControllerPromptButtonLabels);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_CONFIRM_PROPERTY:
		proton_plus_utils_controller_prompt_button_labels_set_confirm (self, g_value_get_enum (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PROMPT_BUTTON_LABELS_BACK_PROPERTY:
		proton_plus_utils_controller_prompt_button_labels_set_back (self, g_value_get_enum (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static inline gpointer
proton_plus_utils_controller_presentation_state_get_instance_private (ProtonPlusUtilsControllerPresentationState* self)
{
	return G_STRUCT_MEMBER_P (self, ProtonPlusUtilsControllerPresentationState_private_offset);
}

static ProtonPlusUtilsControllerHintKind*
_vala_array_dup54 (ProtonPlusUtilsControllerHintKind* self,
                   gssize length)
{
	if (length > 0) {
		return _vala_memdup2 (self, length * sizeof (ProtonPlusUtilsControllerHintKind));
	}
	return NULL;
}

ProtonPlusUtilsControllerPresentationState*
proton_plus_utils_controller_presentation_state_construct (GType object_type,
                                                           gboolean controller_mode_active,
                                                           ProtonPlusUtilsControllerHintKind* hints,
                                                           gint hints_length1,
                                                           ProtonPlusUtilsControllerFaceButtonLabelFacts* face_labels,
                                                           ProtonPlusUtilsControllerPromptButtonLabels* prompt_labels)
{
	ProtonPlusUtilsControllerPresentationState * self = NULL;
	ProtonPlusUtilsControllerHintKind* _tmp0_;
	gint _tmp0__length1;
	g_return_val_if_fail (face_labels != NULL, NULL);
	g_return_val_if_fail (prompt_labels != NULL, NULL);
	self = (ProtonPlusUtilsControllerPresentationState*) g_object_new (object_type, NULL);
	proton_plus_utils_controller_presentation_state_set_controller_mode_active (self, controller_mode_active);
	_tmp0_ = (hints != NULL) ? _vala_array_dup54 (hints, hints_length1) : hints;
	_tmp0__length1 = hints_length1;
	self->priv->hint_values = (g_free (self->priv->hint_values), NULL);
	self->priv->hint_values = _tmp0_;
	self->priv->hint_values_length1 = _tmp0__length1;
	self->priv->_hint_values_size_ = self->priv->hint_values_length1;
	proton_plus_utils_controller_presentation_state_set_face_labels (self, face_labels);
	proton_plus_utils_controller_presentation_state_set_prompt_labels (self, prompt_labels);
	return self;
}

ProtonPlusUtilsControllerPresentationState*
proton_plus_utils_controller_presentation_state_new (gboolean controller_mode_active,
                                                     ProtonPlusUtilsControllerHintKind* hints,
                                                     gint hints_length1,
                                                     ProtonPlusUtilsControllerFaceButtonLabelFacts* face_labels,
                                                     ProtonPlusUtilsControllerPromptButtonLabels* prompt_labels)
{
	return proton_plus_utils_controller_presentation_state_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_PRESENTATION_STATE, controller_mode_active, hints, hints_length1, face_labels, prompt_labels);
}

gboolean
proton_plus_utils_controller_presentation_state_equal_to (ProtonPlusUtilsControllerPresentationState* self,
                                                          ProtonPlusUtilsControllerPresentationState* other)
{
	gboolean _tmp0_ = FALSE;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_;
	gboolean _tmp5_;
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (other != NULL, FALSE);
	_tmp4_ = self->priv->_controller_mode_active;
	_tmp5_ = other->priv->_controller_mode_active;
	if (_tmp4_ != _tmp5_) {
		_tmp3_ = TRUE;
	} else {
		ProtonPlusUtilsControllerFaceButtonLabelFacts* _tmp6_;
		ProtonPlusUtilsControllerFaceButtonLabelFacts* _tmp7_;
		_tmp6_ = self->priv->_face_labels;
		_tmp7_ = other->priv->_face_labels;
		_tmp3_ = !proton_plus_utils_controller_face_button_label_facts_equal_to (_tmp6_, _tmp7_);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp8_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp9_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp10_;
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp11_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp12_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp13_;
		_tmp8_ = self->priv->_prompt_labels;
		_tmp9_ = proton_plus_utils_controller_prompt_button_labels_get_confirm (_tmp8_);
		_tmp10_ = _tmp9_;
		_tmp11_ = other->priv->_prompt_labels;
		_tmp12_ = proton_plus_utils_controller_prompt_button_labels_get_confirm (_tmp11_);
		_tmp13_ = _tmp12_;
		_tmp2_ = _tmp10_ != _tmp13_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp14_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp15_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp16_;
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp17_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp18_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp19_;
		_tmp14_ = self->priv->_prompt_labels;
		_tmp15_ = proton_plus_utils_controller_prompt_button_labels_get_back (_tmp14_);
		_tmp16_ = _tmp15_;
		_tmp17_ = other->priv->_prompt_labels;
		_tmp18_ = proton_plus_utils_controller_prompt_button_labels_get_back (_tmp17_);
		_tmp19_ = _tmp18_;
		_tmp1_ = _tmp16_ != _tmp19_;
	}
	if (_tmp1_) {
		_tmp0_ = TRUE;
	} else {
		ProtonPlusUtilsControllerHintKind* _tmp20_;
		gint _tmp20__length1;
		ProtonPlusUtilsControllerHintKind* _tmp21_;
		gint _tmp21__length1;
		_tmp20_ = self->priv->hint_values;
		_tmp20__length1 = self->priv->hint_values_length1;
		_tmp21_ = other->priv->hint_values;
		_tmp21__length1 = other->priv->hint_values_length1;
		_tmp0_ = _tmp20__length1 != _tmp21__length1;
	}
	if (_tmp0_) {
		result = FALSE;
		return result;
	}
	{
		gint i = 0;
		i = 0;
		{
			gboolean _tmp22_ = FALSE;
			_tmp22_ = TRUE;
			while (TRUE) {
				ProtonPlusUtilsControllerHintKind* _tmp24_;
				gint _tmp24__length1;
				ProtonPlusUtilsControllerHintKind* _tmp25_;
				gint _tmp25__length1;
				ProtonPlusUtilsControllerHintKind _tmp26_;
				ProtonPlusUtilsControllerHintKind* _tmp27_;
				gint _tmp27__length1;
				ProtonPlusUtilsControllerHintKind _tmp28_;
				if (!_tmp22_) {
					gint _tmp23_;
					_tmp23_ = i;
					i = _tmp23_ + 1;
				}
				_tmp22_ = FALSE;
				_tmp24_ = self->priv->hint_values;
				_tmp24__length1 = self->priv->hint_values_length1;
				if (!(i < _tmp24__length1)) {
					break;
				}
				_tmp25_ = self->priv->hint_values;
				_tmp25__length1 = self->priv->hint_values_length1;
				_tmp26_ = _tmp25_[i];
				_tmp27_ = other->priv->hint_values;
				_tmp27__length1 = other->priv->hint_values_length1;
				_tmp28_ = _tmp27_[i];
				if (_tmp26_ != _tmp28_) {
					result = FALSE;
					return result;
				}
			}
		}
	}
	result = TRUE;
	return result;
}

ProtonPlusUtilsControllerHintKind*
proton_plus_utils_controller_presentation_state_get_hints (ProtonPlusUtilsControllerPresentationState* self,
                                                           gint* result_length1)
{
	ProtonPlusUtilsControllerHintKind* _tmp0_;
	gint _tmp0__length1;
	ProtonPlusUtilsControllerHintKind* _tmp1_;
	gint _tmp1__length1;
	ProtonPlusUtilsControllerHintKind* result;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->hint_values;
	_tmp0__length1 = self->priv->hint_values_length1;
	_tmp1_ = _tmp0_;
	_tmp1__length1 = _tmp0__length1;
	if (result_length1) {
		*result_length1 = _tmp1__length1;
	}
	result = _tmp1_;
	return result;
}

gboolean
proton_plus_utils_controller_presentation_state_get_controller_mode_active (ProtonPlusUtilsControllerPresentationState* self)
{
	gboolean result;
	g_return_val_if_fail (self != NULL, FALSE);
	result = self->priv->_controller_mode_active;
	return result;
}

static void
proton_plus_utils_controller_presentation_state_set_controller_mode_active (ProtonPlusUtilsControllerPresentationState* self,
                                                                            gboolean value)
{
	gboolean old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_presentation_state_get_controller_mode_active (self);
	if (old_value != value) {
		self->priv->_controller_mode_active = value;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY]);
	}
}

ProtonPlusUtilsControllerFaceButtonLabelFacts*
proton_plus_utils_controller_presentation_state_get_face_labels (ProtonPlusUtilsControllerPresentationState* self)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts* result;
	ProtonPlusUtilsControllerFaceButtonLabelFacts* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_face_labels;
	result = _tmp0_;
	return result;
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

static void
proton_plus_utils_controller_presentation_state_set_face_labels (ProtonPlusUtilsControllerPresentationState* self,
                                                                 ProtonPlusUtilsControllerFaceButtonLabelFacts* value)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts* old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_presentation_state_get_face_labels (self);
	if (old_value != value) {
		ProtonPlusUtilsControllerFaceButtonLabelFacts* _tmp0_;
		_tmp0_ = _g_object_ref0 (value);
		_g_object_unref0 (self->priv->_face_labels);
		self->priv->_face_labels = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY]);
	}
}

ProtonPlusUtilsControllerPromptButtonLabels*
proton_plus_utils_controller_presentation_state_get_prompt_labels (ProtonPlusUtilsControllerPresentationState* self)
{
	ProtonPlusUtilsControllerPromptButtonLabels* result;
	ProtonPlusUtilsControllerPromptButtonLabels* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_prompt_labels;
	result = _tmp0_;
	return result;
}

static void
proton_plus_utils_controller_presentation_state_set_prompt_labels (ProtonPlusUtilsControllerPresentationState* self,
                                                                   ProtonPlusUtilsControllerPromptButtonLabels* value)
{
	ProtonPlusUtilsControllerPromptButtonLabels* old_value;
	g_return_if_fail (self != NULL);
	old_value = proton_plus_utils_controller_presentation_state_get_prompt_labels (self);
	if (old_value != value) {
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp0_;
		_tmp0_ = _g_object_ref0 (value);
		_g_object_unref0 (self->priv->_prompt_labels);
		self->priv->_prompt_labels = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY]);
	}
}

static void
proton_plus_utils_controller_presentation_state_class_init (ProtonPlusUtilsControllerPresentationStateClass * klass,
                                                            gpointer klass_data)
{
	proton_plus_utils_controller_presentation_state_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &ProtonPlusUtilsControllerPresentationState_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_proton_plus_utils_controller_presentation_state_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_proton_plus_utils_controller_presentation_state_set_property;
	G_OBJECT_CLASS (klass)->finalize = proton_plus_utils_controller_presentation_state_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY] = g_param_spec_boolean ("controller-mode-active", "controller-mode-active", "controller-mode-active", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY] = g_param_spec_object ("face-labels", "face-labels", "face-labels", PROTON_PLUS_UTILS_TYPE_CONTROLLER_FACE_BUTTON_LABEL_FACTS, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY, proton_plus_utils_controller_presentation_state_properties[PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY] = g_param_spec_object ("prompt-labels", "prompt-labels", "prompt-labels", PROTON_PLUS_UTILS_TYPE_CONTROLLER_PROMPT_BUTTON_LABELS, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
}

static void
proton_plus_utils_controller_presentation_state_instance_init (ProtonPlusUtilsControllerPresentationState * self,
                                                               gpointer klass)
{
	self->priv = proton_plus_utils_controller_presentation_state_get_instance_private (self);
}

static void
proton_plus_utils_controller_presentation_state_finalize (GObject * obj)
{
	ProtonPlusUtilsControllerPresentationState * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PRESENTATION_STATE, ProtonPlusUtilsControllerPresentationState);
	self->priv->hint_values = (g_free (self->priv->hint_values), NULL);
	_g_object_unref0 (self->priv->_face_labels);
	_g_object_unref0 (self->priv->_prompt_labels);
	G_OBJECT_CLASS (proton_plus_utils_controller_presentation_state_parent_class)->finalize (obj);
}

static GType
proton_plus_utils_controller_presentation_state_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerPresentationStateClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_presentation_state_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerPresentationState), 0, (GInstanceInitFunc) proton_plus_utils_controller_presentation_state_instance_init, NULL };
	GType proton_plus_utils_controller_presentation_state_type_id;
	proton_plus_utils_controller_presentation_state_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerPresentationState", &g_define_type_info, 0);
	ProtonPlusUtilsControllerPresentationState_private_offset = g_type_add_instance_private (proton_plus_utils_controller_presentation_state_type_id, sizeof (ProtonPlusUtilsControllerPresentationStatePrivate));
	return proton_plus_utils_controller_presentation_state_type_id;
}

GType
proton_plus_utils_controller_presentation_state_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_presentation_state_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_presentation_state_type_id__once)) {
		GType proton_plus_utils_controller_presentation_state_type_id;
		proton_plus_utils_controller_presentation_state_type_id = proton_plus_utils_controller_presentation_state_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_presentation_state_type_id__once, proton_plus_utils_controller_presentation_state_type_id);
	}
	return proton_plus_utils_controller_presentation_state_type_id__once;
}

static void
_vala_proton_plus_utils_controller_presentation_state_get_property (GObject * object,
                                                                    guint property_id,
                                                                    GValue * value,
                                                                    GParamSpec * pspec)
{
	ProtonPlusUtilsControllerPresentationState * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PRESENTATION_STATE, ProtonPlusUtilsControllerPresentationState);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY:
		g_value_set_boolean (value, proton_plus_utils_controller_presentation_state_get_controller_mode_active (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY:
		g_value_set_object (value, proton_plus_utils_controller_presentation_state_get_face_labels (self));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY:
		g_value_set_object (value, proton_plus_utils_controller_presentation_state_get_prompt_labels (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_proton_plus_utils_controller_presentation_state_set_property (GObject * object,
                                                                    guint property_id,
                                                                    const GValue * value,
                                                                    GParamSpec * pspec)
{
	ProtonPlusUtilsControllerPresentationState * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, PROTON_PLUS_UTILS_TYPE_CONTROLLER_PRESENTATION_STATE, ProtonPlusUtilsControllerPresentationState);
	switch (property_id) {
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_CONTROLLER_MODE_ACTIVE_PROPERTY:
		proton_plus_utils_controller_presentation_state_set_controller_mode_active (self, g_value_get_boolean (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_FACE_LABELS_PROPERTY:
		proton_plus_utils_controller_presentation_state_set_face_labels (self, g_value_get_object (value));
		break;
		case PROTON_PLUS_UTILS_CONTROLLER_PRESENTATION_STATE_PROMPT_LABELS_PROPERTY:
		proton_plus_utils_controller_presentation_state_set_prompt_labels (self, g_value_get_object (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_array_add8 (ProtonPlusUtilsControllerHintKind* * array,
                  gint* length,
                  gint* size,
                  ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add9 (ProtonPlusUtilsControllerHintKind* * array,
                  gint* length,
                  gint* size,
                  ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add10 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add11 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add12 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add13 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add14 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add15 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add16 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add17 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add18 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add19 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

static void
_vala_array_add20 (ProtonPlusUtilsControllerHintKind* * array,
                   gint* length,
                   gint* size,
                   ProtonPlusUtilsControllerHintKind value)
{
	if ((*length) == (*size)) {
		*size = (*size) ? (2 * (*size)) : 4;
		*array = g_renew (ProtonPlusUtilsControllerHintKind, *array, *size);
	}
	(*array)[(*length)++] = value;
}

ProtonPlusUtilsControllerHintKind*
proton_plus_utils_controller_hint_policy_get_hints (ProtonPlusUtilsControllerHintContext* context,
                                                    gint* result_length1)
{
	ProtonPlusUtilsControllerHintKind* hints = NULL;
	ProtonPlusUtilsControllerHintKind* _tmp0_;
	gint hints_length1;
	gint _hints_size_;
	gboolean _tmp1_;
	gboolean _tmp2_;
	gboolean _tmp4_;
	gboolean _tmp5_;
	ProtonPlusUtilsControllerHintControlKind _tmp9_;
	ProtonPlusUtilsControllerHintControlKind _tmp10_;
	gboolean _tmp11_;
	gboolean _tmp12_;
	gboolean _tmp17_ = FALSE;
	gboolean _tmp18_;
	gboolean _tmp19_;
	gboolean _tmp22_ = FALSE;
	gboolean _tmp23_;
	gboolean _tmp24_;
	gboolean _tmp27_ = FALSE;
	gboolean _tmp28_;
	gboolean _tmp29_;
	ProtonPlusUtilsControllerHintKind* _tmp32_;
	gint _tmp32__length1;
	ProtonPlusUtilsControllerHintKind* result;
	g_return_val_if_fail (context != NULL, NULL);
	_tmp0_ = g_new0 (ProtonPlusUtilsControllerHintKind, 0);
	hints = _tmp0_;
	hints_length1 = 0;
	_hints_size_ = hints_length1;
	_tmp1_ = proton_plus_utils_controller_hint_context_get_controller_mode_active (context);
	_tmp2_ = _tmp1_;
	if (!_tmp2_) {
		ProtonPlusUtilsControllerHintKind* _tmp3_;
		gint _tmp3__length1;
		_tmp3_ = hints;
		_tmp3__length1 = hints_length1;
		if (result_length1) {
			*result_length1 = _tmp3__length1;
		}
		result = _tmp3_;
		return result;
	}
	_tmp4_ = proton_plus_utils_controller_hint_context_get_has_dialog (context);
	_tmp5_ = _tmp4_;
	if (_tmp5_) {
		ProtonPlusUtilsControllerHintControlKind _tmp6_;
		ProtonPlusUtilsControllerHintControlKind _tmp7_;
		ProtonPlusUtilsControllerHintKind* _tmp8_;
		gint _tmp8__length1;
		_tmp6_ = proton_plus_utils_controller_hint_context_get_control_kind (context);
		_tmp7_ = _tmp6_;
		if (_tmp7_ == PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_EDITABLE) {
			_vala_array_add8 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TEXT_INPUT);
		}
		_tmp8_ = hints;
		_tmp8__length1 = hints_length1;
		if (result_length1) {
			*result_length1 = _tmp8__length1;
		}
		result = _tmp8_;
		return result;
	}
	_tmp9_ = proton_plus_utils_controller_hint_context_get_control_kind (context);
	_tmp10_ = _tmp9_;
	switch (_tmp10_) {
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_TOGGLE:
		{
			_vala_array_add9 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TOGGLE);
			break;
		}
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_OPEN:
		{
			_vala_array_add10 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_OPEN);
			break;
		}
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_HORIZONTAL_RANGE:
		{
			_vala_array_add11 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_HORIZONTAL);
			break;
		}
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_VERTICAL_RANGE:
		{
			_vala_array_add12 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_ADJUST_VERTICAL);
			break;
		}
		case PROTON_PLUS_UTILS_CONTROLLER_HINT_CONTROL_KIND_EDITABLE:
		{
			_vala_array_add13 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_TEXT_INPUT);
			break;
		}
		default:
		{
			_vala_array_add14 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SELECT);
			break;
		}
	}
	_tmp11_ = proton_plus_utils_controller_hint_context_get_has_popover (context);
	_tmp12_ = _tmp11_;
	if (_tmp12_) {
		_vala_array_add15 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_CLOSE);
	} else {
		gboolean _tmp13_;
		gboolean _tmp14_;
		_tmp13_ = proton_plus_utils_controller_hint_context_get_can_navigate_back (context);
		_tmp14_ = _tmp13_;
		if (_tmp14_) {
			_vala_array_add16 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_BACK);
		} else {
			gboolean _tmp15_;
			gboolean _tmp16_;
			_tmp15_ = proton_plus_utils_controller_hint_context_get_can_exit (context);
			_tmp16_ = _tmp15_;
			if (_tmp16_) {
				_vala_array_add17 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_EXIT);
			}
		}
	}
	_tmp18_ = proton_plus_utils_controller_hint_context_get_has_popover (context);
	_tmp19_ = _tmp18_;
	if (!_tmp19_) {
		gboolean _tmp20_;
		gboolean _tmp21_;
		_tmp20_ = proton_plus_utils_controller_hint_context_get_can_switch_section (context);
		_tmp21_ = _tmp20_;
		_tmp17_ = _tmp21_;
	} else {
		_tmp17_ = FALSE;
	}
	if (_tmp17_) {
		_vala_array_add18 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SWITCH_SECTION);
	}
	_tmp23_ = proton_plus_utils_controller_hint_context_get_has_popover (context);
	_tmp24_ = _tmp23_;
	if (!_tmp24_) {
		gboolean _tmp25_;
		gboolean _tmp26_;
		_tmp25_ = proton_plus_utils_controller_hint_context_get_can_open_search (context);
		_tmp26_ = _tmp25_;
		_tmp22_ = _tmp26_;
	} else {
		_tmp22_ = FALSE;
	}
	if (_tmp22_) {
		_vala_array_add19 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_SEARCH);
	}
	_tmp28_ = proton_plus_utils_controller_hint_context_get_has_popover (context);
	_tmp29_ = _tmp28_;
	if (!_tmp29_) {
		gboolean _tmp30_;
		gboolean _tmp31_;
		_tmp30_ = proton_plus_utils_controller_hint_context_get_can_open_filter (context);
		_tmp31_ = _tmp30_;
		_tmp27_ = _tmp31_;
	} else {
		_tmp27_ = FALSE;
	}
	if (_tmp27_) {
		_vala_array_add20 (&hints, &hints_length1, &_hints_size_, PROTON_PLUS_UTILS_CONTROLLER_HINT_KIND_FILTER);
	}
	_tmp32_ = hints;
	_tmp32__length1 = hints_length1;
	if (result_length1) {
		*result_length1 = _tmp32__length1;
	}
	result = _tmp32_;
	return result;
}

ProtonPlusUtilsControllerHintPolicy*
proton_plus_utils_controller_hint_policy_construct (GType object_type)
{
	ProtonPlusUtilsControllerHintPolicy * self = NULL;
	self = (ProtonPlusUtilsControllerHintPolicy*) g_object_new (object_type, NULL);
	return self;
}

ProtonPlusUtilsControllerHintPolicy*
proton_plus_utils_controller_hint_policy_new (void)
{
	return proton_plus_utils_controller_hint_policy_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_HINT_POLICY);
}

static void
proton_plus_utils_controller_hint_policy_class_init (ProtonPlusUtilsControllerHintPolicyClass * klass,
                                                     gpointer klass_data)
{
	proton_plus_utils_controller_hint_policy_parent_class = g_type_class_peek_parent (klass);
}

static void
proton_plus_utils_controller_hint_policy_instance_init (ProtonPlusUtilsControllerHintPolicy * self,
                                                        gpointer klass)
{
}

static GType
proton_plus_utils_controller_hint_policy_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerHintPolicyClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_hint_policy_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerHintPolicy), 0, (GInstanceInitFunc) proton_plus_utils_controller_hint_policy_instance_init, NULL };
	GType proton_plus_utils_controller_hint_policy_type_id;
	proton_plus_utils_controller_hint_policy_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerHintPolicy", &g_define_type_info, 0);
	return proton_plus_utils_controller_hint_policy_type_id;
}

GType
proton_plus_utils_controller_hint_policy_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_hint_policy_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_hint_policy_type_id__once)) {
		GType proton_plus_utils_controller_hint_policy_type_id;
		proton_plus_utils_controller_hint_policy_type_id = proton_plus_utils_controller_hint_policy_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_hint_policy_type_id__once, proton_plus_utils_controller_hint_policy_type_id);
	}
	return proton_plus_utils_controller_hint_policy_type_id__once;
}

ProtonPlusUtilsControllerFaceButtonLabelFacts*
proton_plus_utils_controller_physical_label_resolver_from_sdl (SDL_GamepadButtonLabel south,
                                                               SDL_GamepadButtonLabel east,
                                                               SDL_GamepadButtonLabel west,
                                                               SDL_GamepadButtonLabel north)
{
	ProtonPlusUtilsControllerFaceButtonLabelFacts* _tmp0_;
	ProtonPlusUtilsControllerFaceButtonLabelFacts* result;
	_tmp0_ = proton_plus_utils_controller_face_button_label_facts_new (proton_plus_utils_controller_physical_label_resolver_map_sdl_label (south, PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_BOTTOM), proton_plus_utils_controller_physical_label_resolver_map_sdl_label (east, PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_RIGHT), proton_plus_utils_controller_physical_label_resolver_map_sdl_label (west, PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_LEFT), proton_plus_utils_controller_physical_label_resolver_map_sdl_label (north, PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TOP));
	result = _tmp0_;
	return result;
}

ProtonPlusUtilsControllerPromptButtonLabels*
proton_plus_utils_controller_physical_label_resolver_map_prompts (ProtonPlusUtilsControllerFaceButtonLabelFacts* facts,
                                                                  ProtonPlusUtilsControllerConfirmButton confirm_button)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp5_;
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp6_;
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp7_;
	ProtonPlusUtilsControllerPhysicalButtonLabel _tmp8_;
	ProtonPlusUtilsControllerPromptButtonLabels* _tmp9_;
	ProtonPlusUtilsControllerPromptButtonLabels* result;
	g_return_val_if_fail (facts != NULL, NULL);
	if (confirm_button == PROTON_PLUS_UTILS_CONTROLLER_CONFIRM_BUTTON_EAST) {
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp0_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp1_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp2_;
		ProtonPlusUtilsControllerPhysicalButtonLabel _tmp3_;
		ProtonPlusUtilsControllerPromptButtonLabels* _tmp4_;
		_tmp0_ = proton_plus_utils_controller_face_button_label_facts_get_east (facts);
		_tmp1_ = _tmp0_;
		_tmp2_ = proton_plus_utils_controller_face_button_label_facts_get_south (facts);
		_tmp3_ = _tmp2_;
		_tmp4_ = proton_plus_utils_controller_prompt_button_labels_new (_tmp1_, _tmp3_);
		result = _tmp4_;
		return result;
	}
	_tmp5_ = proton_plus_utils_controller_face_button_label_facts_get_south (facts);
	_tmp6_ = _tmp5_;
	_tmp7_ = proton_plus_utils_controller_face_button_label_facts_get_east (facts);
	_tmp8_ = _tmp7_;
	_tmp9_ = proton_plus_utils_controller_prompt_button_labels_new (_tmp6_, _tmp8_);
	result = _tmp9_;
	return result;
}

static ProtonPlusUtilsControllerPhysicalButtonLabel
proton_plus_utils_controller_physical_label_resolver_map_sdl_label (SDL_GamepadButtonLabel label,
                                                                    ProtonPlusUtilsControllerPhysicalButtonLabel fallback)
{
	ProtonPlusUtilsControllerPhysicalButtonLabel result;
	switch (label) {
		case SDL_GAMEPAD_BUTTON_LABEL_A:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_A;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_B:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_B;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_X:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_X;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_Y:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_Y;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_CROSS:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CROSS;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_CIRCLE:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_CIRCLE;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_SQUARE:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_SQUARE;
			return result;
		}
		case SDL_GAMEPAD_BUTTON_LABEL_TRIANGLE:
		{
			result = PROTON_PLUS_UTILS_CONTROLLER_PHYSICAL_BUTTON_LABEL_TRIANGLE;
			return result;
		}
		default:
		{
			result = fallback;
			return result;
		}
	}
}

ProtonPlusUtilsControllerPhysicalLabelResolver*
proton_plus_utils_controller_physical_label_resolver_construct (GType object_type)
{
	ProtonPlusUtilsControllerPhysicalLabelResolver * self = NULL;
	self = (ProtonPlusUtilsControllerPhysicalLabelResolver*) g_object_new (object_type, NULL);
	return self;
}

ProtonPlusUtilsControllerPhysicalLabelResolver*
proton_plus_utils_controller_physical_label_resolver_new (void)
{
	return proton_plus_utils_controller_physical_label_resolver_construct (PROTON_PLUS_UTILS_TYPE_CONTROLLER_PHYSICAL_LABEL_RESOLVER);
}

static void
proton_plus_utils_controller_physical_label_resolver_class_init (ProtonPlusUtilsControllerPhysicalLabelResolverClass * klass,
                                                                 gpointer klass_data)
{
	proton_plus_utils_controller_physical_label_resolver_parent_class = g_type_class_peek_parent (klass);
}

static void
proton_plus_utils_controller_physical_label_resolver_instance_init (ProtonPlusUtilsControllerPhysicalLabelResolver * self,
                                                                    gpointer klass)
{
}

static GType
proton_plus_utils_controller_physical_label_resolver_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (ProtonPlusUtilsControllerPhysicalLabelResolverClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) proton_plus_utils_controller_physical_label_resolver_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProtonPlusUtilsControllerPhysicalLabelResolver), 0, (GInstanceInitFunc) proton_plus_utils_controller_physical_label_resolver_instance_init, NULL };
	GType proton_plus_utils_controller_physical_label_resolver_type_id;
	proton_plus_utils_controller_physical_label_resolver_type_id = g_type_register_static (G_TYPE_OBJECT, "ProtonPlusUtilsControllerPhysicalLabelResolver", &g_define_type_info, 0);
	return proton_plus_utils_controller_physical_label_resolver_type_id;
}

GType
proton_plus_utils_controller_physical_label_resolver_get_type (void)
{
	static volatile gsize proton_plus_utils_controller_physical_label_resolver_type_id__once = 0;
	if (g_once_init_enter (&proton_plus_utils_controller_physical_label_resolver_type_id__once)) {
		GType proton_plus_utils_controller_physical_label_resolver_type_id;
		proton_plus_utils_controller_physical_label_resolver_type_id = proton_plus_utils_controller_physical_label_resolver_get_type_once ();
		g_once_init_leave (&proton_plus_utils_controller_physical_label_resolver_type_id__once, proton_plus_utils_controller_physical_label_resolver_type_id);
	}
	return proton_plus_utils_controller_physical_label_resolver_type_id__once;
}

static inline gpointer
_vala_memdup2 (gconstpointer mem,
               gsize byte_size)
{
	gpointer new_mem;
	if (mem && byte_size != 0) {
		new_mem = g_malloc (byte_size);
		memcpy (new_mem, mem, byte_size);
	} else {
		new_mem = NULL;
	}
	return new_mem;
}

