From 42666e20548216f11721567d0df0ed396bbb8495 Mon Sep 17 00:00:00 2001
From: James Calligeros <jcalligeros99@gmail.com>
Date: Sat, 30 Mar 2024 16:05:05 +1000
Subject: [PATCH 03/10] conf: Add WpProperties as a member of WpConf
WpProperties may be used to control the behaviour of a WpConf
object. This allows those properties to be referenced at any time
during the lifetime of a WpConf.
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
---
lib/wp/conf.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/lib/wp/conf.c b/lib/wp/conf.c
index f10a04cc..ed96200b 100644
--- a/lib/wp/conf.c
+++ b/lib/wp/conf.c
@@ -50,6 +50,7 @@ struct _WpConf
/* Props */
gchar *name;
+ WpProperties *properties;
/* Private */
GArray *conf_sections; /* element-type: WpConfSection */
@@ -59,6 +60,7 @@ struct _WpConf
enum {
PROP_0,
PROP_NAME,
+ PROP_PROPERTIES,
};
G_DEFINE_TYPE (WpConf, wp_conf, G_TYPE_OBJECT)
@@ -81,6 +83,9 @@ wp_conf_set_property (GObject * object, guint property_id,
case PROP_NAME:
self->name = g_value_dup_string (value);
break;
+ case PROP_PROPERTIES:
+ self->properties = g_value_dup_boxed (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -97,6 +102,9 @@ wp_conf_get_property (GObject * object, guint property_id,
case PROP_NAME:
g_value_set_string (value, self->name);
break;
+ case PROP_PROPERTIES:
+ g_value_take_boxed (value, wp_properties_copy (self->properties));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -109,6 +117,7 @@ wp_conf_finalize (GObject * object)
WpConf *self = WP_CONF (object);
wp_conf_close (self);
+ g_clear_pointer (&self->properties, wp_properties_unref);
g_clear_pointer (&self->conf_sections, g_array_unref);
g_clear_pointer (&self->files, g_ptr_array_unref);
g_clear_pointer (&self->name, g_free);
@@ -125,9 +134,13 @@ wp_conf_class_init (WpConfClass * klass)
object_class->set_property = wp_conf_set_property;
object_class->get_property = wp_conf_get_property;
- g_object_class_install_property (object_class, PROP_NAME,
- g_param_spec_string ("name", "name", "The name of the configuration file",
+ g_object_class_install_property(object_class, PROP_NAME,
+ g_param_spec_string ("name", "name", "The name of the configuration file",
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property(object_class, PROP_PROPERTIES,
+ g_param_spec_boxed ("properties", "properties", "WpProperties",
+ WP_TYPE_PROPERTIES, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
}
/*!
@@ -145,8 +158,10 @@ WpConf *
wp_conf_new (const gchar * name, WpProperties * properties)
{
g_return_val_if_fail (name, NULL);
- g_clear_pointer (&properties, wp_properties_unref);
- return g_object_new (WP_TYPE_CONF, "name", name, NULL);
+ g_autoptr (WpProperties) props = properties;
+ return g_object_new (WP_TYPE_CONF, "name", name,
+ "properties", props,
+ NULL);
}
/*!
--
2.44.0