GSettings: add g_settings_reset()

Resets a key to its default value.
This commit is contained in:
Ryan Lortie 2010-07-22 17:49:40 -04:00
parent f6d3e224df
commit aed440815e
6 changed files with 76 additions and 9 deletions

View File

@ -2138,6 +2138,7 @@ g_settings_apply
g_settings_revert g_settings_revert
g_settings_get_has_unapplied g_settings_get_has_unapplied
g_settings_get_child g_settings_get_child
g_settings_reset
<SUBSECTION Introspection> <SUBSECTION Introspection>
g_settings_list_schemas g_settings_list_schemas

View File

@ -95,15 +95,29 @@ g_delayed_settings_backend_read (GSettingsBackend *backend,
gboolean default_value) gboolean default_value)
{ {
GDelayedSettingsBackend *delayed = G_DELAYED_SETTINGS_BACKEND (backend); GDelayedSettingsBackend *delayed = G_DELAYED_SETTINGS_BACKEND (backend);
GVariant *result; gpointer result = NULL;
if (!default_value && if (!default_value)
(result = g_tree_lookup (delayed->priv->delayed, key))) {
return g_variant_ref (result); g_static_mutex_lock (&delayed->priv->lock);
if (g_tree_lookup_extended (delayed->priv->delayed, key, NULL, &result))
return g_settings_backend_read (delayed->priv->backend, {
key, expected_type, default_value); /* NULL in the tree means we should consult the default value */
if (result != NULL)
g_variant_ref (result);
else
default_value = TRUE;
} }
g_static_mutex_unlock (&delayed->priv->lock);
}
if (result == NULL)
result = g_settings_backend_read (delayed->priv->backend, key,
expected_type, default_value);
return result;
}
static gboolean static gboolean
g_delayed_settings_backend_write (GSettingsBackend *backend, g_delayed_settings_backend_write (GSettingsBackend *backend,
const gchar *key, const gchar *key,
@ -172,7 +186,16 @@ g_delayed_settings_backend_reset (GSettingsBackend *backend,
const gchar *key, const gchar *key,
gpointer origin_tag) gpointer origin_tag)
{ {
/* deal with this... */ GDelayedSettingsBackend *delayed = G_DELAYED_SETTINGS_BACKEND (backend);
gboolean was_empty;
g_static_mutex_lock (&delayed->priv->lock);
was_empty = g_tree_nnodes (delayed->priv->delayed) == 0;
g_tree_insert (delayed->priv->delayed, g_strdup (key), NULL);
g_static_mutex_unlock (&delayed->priv->lock);
if (was_empty)
g_delayed_settings_backend_notify_unapplied (delayed);
} }
static void static void

View File

@ -1464,6 +1464,7 @@ g_settings_new_with_backend
g_settings_new_with_backend_and_path g_settings_new_with_backend_and_path
g_settings_new_with_path g_settings_new_with_path
g_settings_revert g_settings_revert
g_settings_reset
g_settings_set g_settings_set
g_settings_set_value g_settings_set_value
g_settings_unbind g_settings_unbind

View File

@ -95,7 +95,10 @@ g_memory_settings_backend_write_one (gpointer key,
{ {
GMemorySettingsBackend *memory = data; GMemorySettingsBackend *memory = data;
if (value != NULL)
g_hash_table_insert (memory->table, g_strdup (key), g_variant_ref (value)); g_hash_table_insert (memory->table, g_strdup (key), g_variant_ref (value));
else
g_hash_table_remove (memory->table, key);
return FALSE; return FALSE;
} }
@ -111,6 +114,20 @@ g_memory_settings_backend_write_keys (GSettingsBackend *backend,
return TRUE; return TRUE;
} }
static void
g_memory_settings_backend_reset (GSettingsBackend *backend,
const gchar *key,
gpointer origin_tag)
{
GMemorySettingsBackend *memory = G_MEMORY_SETTINGS_BACKEND (backend);
if (g_hash_table_lookup (memory->table, key))
{
g_hash_table_remove (memory->table, key);
g_settings_backend_changed (backend, key, origin_tag);
}
}
static gboolean static gboolean
g_memory_settings_backend_get_writable (GSettingsBackend *backend, g_memory_settings_backend_get_writable (GSettingsBackend *backend,
const gchar *name) const gchar *name)
@ -152,6 +169,7 @@ g_memory_settings_backend_class_init (GMemorySettingsBackendClass *class)
backend_class->read = g_memory_settings_backend_read; backend_class->read = g_memory_settings_backend_read;
backend_class->write = g_memory_settings_backend_write; backend_class->write = g_memory_settings_backend_write;
backend_class->write_keys = g_memory_settings_backend_write_keys; backend_class->write_keys = g_memory_settings_backend_write_keys;
backend_class->reset = g_memory_settings_backend_reset;
backend_class->get_writable = g_memory_settings_backend_get_writable; backend_class->get_writable = g_memory_settings_backend_get_writable;
backend_class->get_permission = g_memory_settings_backend_get_permission; backend_class->get_permission = g_memory_settings_backend_get_permission;
object_class->finalize = g_memory_settings_backend_finalize; object_class->finalize = g_memory_settings_backend_finalize;

View File

@ -1961,7 +1961,29 @@ g_settings_get_has_unapplied (GSettings *settings)
G_DELAYED_SETTINGS_BACKEND (settings->priv->backend)); G_DELAYED_SETTINGS_BACKEND (settings->priv->backend));
} }
/* Extra API (sync, get_child, is_writable, list_items) {{{1 */ /* Extra API (reset, sync, get_child, is_writable, list_items) {{{1 */
/**
* g_settings_reset:
* @settings: a #GSettings object
* @key: the name of a key
*
* Resets @key to its default value.
*
* This call resets the key, as much as possible, to its default value.
* That might the value specified in the schema or the one set by the
* administrator.
**/
void
g_settings_reset (GSettings *settings,
const gchar *key)
{
gchar *path;
path = g_strconcat (settings->priv->path, key, NULL);
g_settings_backend_reset (settings->priv->backend, path, NULL);
g_free (path);
}
/** /**
* g_settings_sync: * g_settings_sync:
* *

View File

@ -95,6 +95,8 @@ void g_settings_get (GSettin
const gchar *key, const gchar *key,
const gchar *format, const gchar *format,
...); ...);
void g_settings_reset (GSettings *settings,
const gchar *key);
gint g_settings_get_int (GSettings *settings, gint g_settings_get_int (GSettings *settings,
const gchar *key); const gchar *key);