mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 17:56:17 +01:00
GSettings: store (default, options) in gvdb
gvdb just dropped the ability to have a separate "options" field. We now store the options into a GVariant along with the default value. For now, we use a small shim in GSettingsSchema in order not to touch too much code. A more complete rewrite will follow. This represents a change to the schema file format with another likely to follow. glib-compile-schemas needs to be re-run after installing this change.
This commit is contained in:
parent
7300702179
commit
3a062d2e33
@ -551,10 +551,9 @@ end_element (GMarkupParseContext *context,
|
|||||||
state->choices = NULL;
|
state->choices = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gvdb_item_set_value (state->key, state->value);
|
gvdb_item_set_value (state->key,
|
||||||
gvdb_item_set_options (state->key,
|
g_variant_new ("(*a{sv})", state->value,
|
||||||
g_variant_builder_end (&state->key_options));
|
&state->key_options));
|
||||||
|
|
||||||
state->value = NULL;
|
state->value = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,7 +991,7 @@ GSettings *
|
|||||||
g_settings_get_child (GSettings *settings,
|
g_settings_get_child (GSettings *settings,
|
||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
GVariant *child_schema;
|
const gchar *child_schema;
|
||||||
gchar *child_path;
|
gchar *child_path;
|
||||||
gchar *child_name;
|
gchar *child_name;
|
||||||
GSettings *child;
|
GSettings *child;
|
||||||
@ -999,19 +999,17 @@ g_settings_get_child (GSettings *settings,
|
|||||||
g_return_val_if_fail (G_IS_SETTINGS (settings), NULL);
|
g_return_val_if_fail (G_IS_SETTINGS (settings), NULL);
|
||||||
|
|
||||||
child_name = g_strconcat (name, "/", NULL);
|
child_name = g_strconcat (name, "/", NULL);
|
||||||
child_schema = g_settings_schema_get_value (settings->priv->schema,
|
child_schema = g_settings_schema_get_string (settings->priv->schema,
|
||||||
child_name, NULL);
|
child_name);
|
||||||
if (child_schema == NULL ||
|
if (child_schema == NULL)
|
||||||
!g_variant_is_of_type (child_schema, G_VARIANT_TYPE_STRING))
|
|
||||||
g_error ("Schema '%s' has no child '%s'",
|
g_error ("Schema '%s' has no child '%s'",
|
||||||
settings->priv->schema_name, name);
|
settings->priv->schema_name, name);
|
||||||
|
|
||||||
child_path = g_strconcat (settings->priv->path, child_name, NULL);
|
child_path = g_strconcat (settings->priv->path, child_name, NULL);
|
||||||
child = g_object_new (G_TYPE_SETTINGS,
|
child = g_object_new (G_TYPE_SETTINGS,
|
||||||
"schema", g_variant_get_string (child_schema, NULL),
|
"schema", child_schema,
|
||||||
"path", child_path,
|
"path", child_path,
|
||||||
NULL);
|
NULL);
|
||||||
g_variant_unref (child_schema);
|
|
||||||
g_free (child_path);
|
g_free (child_path);
|
||||||
g_free (child_name);
|
g_free (child_name);
|
||||||
|
|
||||||
|
@ -112,14 +112,14 @@ g_settings_schema_class_init (GSettingsSchemaClass *class)
|
|||||||
g_type_class_add_private (class, sizeof (GSettingsSchemaPrivate));
|
g_type_class_add_private (class, sizeof (GSettingsSchemaPrivate));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *
|
const gchar *
|
||||||
g_settings_schema_get_string (GSettingsSchema *schema,
|
g_settings_schema_get_string (GSettingsSchema *schema,
|
||||||
const gchar *key)
|
const gchar *key)
|
||||||
{
|
{
|
||||||
const gchar *result = NULL;
|
const gchar *result = NULL;
|
||||||
GVariant *value;
|
GVariant *value;
|
||||||
|
|
||||||
if ((value = gvdb_table_get_value (schema->priv->table, key, NULL)))
|
if ((value = gvdb_table_get_value (schema->priv->table, key)))
|
||||||
{
|
{
|
||||||
result = g_variant_get_string (value, NULL);
|
result = g_variant_get_string (value, NULL);
|
||||||
g_variant_unref (value);
|
g_variant_unref (value);
|
||||||
@ -167,10 +167,11 @@ g_settings_schema_get_value (GSettingsSchema *schema,
|
|||||||
const gchar *key,
|
const gchar *key,
|
||||||
GVariant **options)
|
GVariant **options)
|
||||||
{
|
{
|
||||||
|
GVariant *variant, *value;
|
||||||
#if G_BYTE_ORDER == G_BIG_ENDIAN
|
#if G_BYTE_ORDER == G_BIG_ENDIAN
|
||||||
GVariant *variant, *tmp;
|
GVariant *tmp;
|
||||||
|
|
||||||
tmp = gvdb_table_get_value (schema->priv->table, key, options);
|
tmp = gvdb_table_get_value (schema->priv->table, key);
|
||||||
|
|
||||||
if (tmp)
|
if (tmp)
|
||||||
{
|
{
|
||||||
@ -179,13 +180,19 @@ g_settings_schema_get_value (GSettingsSchema *schema,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
variant = NULL;
|
variant = NULL;
|
||||||
|
|
||||||
/* NOTE: no options have byteswapped data in them at the moment */
|
|
||||||
|
|
||||||
return variant;
|
|
||||||
#else
|
#else
|
||||||
return gvdb_table_get_value (schema->priv->table, key, options);
|
variant = gvdb_table_get_value (schema->priv->table, key);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (variant == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
value = g_variant_get_child_value (variant, 0);
|
||||||
|
if (options != NULL)
|
||||||
|
*options = g_variant_get_child_value (variant, 1);
|
||||||
|
g_variant_unref (variant);
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const gchar *
|
const gchar *
|
||||||
|
@ -70,6 +70,9 @@ gboolean g_settings_schema_has_key (GSettin
|
|||||||
G_GNUC_INTERNAL
|
G_GNUC_INTERNAL
|
||||||
const GQuark * g_settings_schema_list (GSettingsSchema *schema,
|
const GQuark * g_settings_schema_list (GSettingsSchema *schema,
|
||||||
gint *n_items);
|
gint *n_items);
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
const gchar * g_settings_schema_get_string (GSettingsSchema *schema,
|
||||||
|
const gchar *key);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user