## GSettings

GSettings — High-level API for application settings

## Synopsis

                        GSettings;
    GSettings *         g_settings_new                      (const gchar *schema_id);
    GSettings *         g_settings_new_with_path            (const gchar *schema_id,
                                                             const gchar *path);
    GSettings *         g_settings_new_with_backend         (const gchar *schema_id,
                                                             GSettingsBackend *backend);
    GSettings *         g_settings_new_with_backend_and_path
                                                            (const gchar *schema_id,
                                                             GSettingsBackend *backend,
                                                             const gchar *path);
    void                g_settings_sync                     (void);
    GVariant *          g_settings_get_value                (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_value                (GSettings *settings,
                                                             const gchar *key,
                                                             GVariant *value);
    gboolean            g_settings_is_writable              (GSettings *settings,
                                                             const gchar *name);
    void                g_settings_delay                    (GSettings *settings);
    void                g_settings_apply                    (GSettings *settings);
    void                g_settings_revert                   (GSettings *settings);
    gboolean            g_settings_get_has_unapplied        (GSettings *settings);
    GSettings *         g_settings_get_child                (GSettings *settings,
                                                             const gchar *name);
    void                g_settings_reset                    (GSettings *settings,
                                                             const gchar *key);

    const gchar * const * g_settings_list_schemas           (void);
    const gchar * const * g_settings_list_relocatable_schemas
                                                            (void);
    gchar **            g_settings_list_keys                (GSettings *settings);
    gchar **            g_settings_list_children            (GSettings *settings);
    GVariant *          g_settings_get_range                (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_range_check              (GSettings *settings,
                                                             const gchar *key,
                                                             GVariant *value);

    void                g_settings_get                      (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *format,
                                                             ...);
    gboolean            g_settings_set                      (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *format,
                                                             ...);
    gboolean            g_settings_get_boolean              (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_boolean              (GSettings *settings,
                                                             const gchar *key,
                                                             gboolean value);
    gint                g_settings_get_int                  (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_int                  (GSettings *settings,
                                                             const gchar *key,
                                                             gint value);
    guint               g_settings_get_uint                 (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_uint                 (GSettings *settings,
                                                             const gchar *key,
                                                             guint value);
    gdouble             g_settings_get_double               (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_double               (GSettings *settings,
                                                             const gchar *key,
                                                             gdouble value);
    gchar *             g_settings_get_string               (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_string               (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *value);
    gchar **            g_settings_get_strv                 (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_strv                 (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *const *value);
    gint                g_settings_get_enum                 (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_enum                 (GSettings *settings,
                                                             const gchar *key,
                                                             gint value);
    guint               g_settings_get_flags                (GSettings *settings,
                                                             const gchar *key);
    gboolean            g_settings_set_flags                (GSettings *settings,
                                                             const gchar *key,
                                                             guint value);

    gboolean            (*GSettingsGetMapping)              (GVariant *value,
                                                             gpointer *result,
                                                             gpointer user_data);
    gpointer            g_settings_get_mapped               (GSettings *settings,
                                                             const gchar *key,
                                                             GSettingsGetMapping mapping,
                                                             gpointer user_data);

    enum                GSettingsBindFlags;
    void                g_settings_bind                     (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             GSettingsBindFlags flags);
    void                g_settings_bind_with_mapping        (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             GSettingsBindFlags flags,
                                                             GSettingsBindGetMapping get_mapping,
                                                             GSettingsBindSetMapping set_mapping,
                                                             gpointer user_data,
                                                             GDestroyNotify destroy);
    void                g_settings_bind_writable            (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             gboolean inverted);
    void                g_settings_unbind                   (gpointer object,
                                                             const gchar *property);
    GVariant *          (*GSettingsBindSetMapping)          (const GValue *value,
                                                             const GVariantType *expected_type,
                                                             gpointer user_data);
    gboolean            (*GSettingsBindGetMapping)          (GValue *value,
                                                             GVariant *variant,
                                                             gpointer user_data);

## Object Hierarchy

      GObject
       +----GSettings

## Properties

      "backend"                  GSettingsBackend*     : Read / Write / Construct Only
      "delay-apply"              gboolean              : Read
      "has-unapplied"            gboolean              : Read
      "path"                     gchar*                : Read / Write / Construct Only
      "schema"                   gchar*                : Read / Write / Construct Only
      "schema-id"                gchar*                : Read / Write / Construct Only
      "settings-schema"          GSettingsSchema*      : Read / Write / Construct Only

## Signals

      "change-event"                                   : Run Last
      "changed"                                        : Has Details
      "writable-change-event"                          : Run Last
      "writable-changed"                               : Has Details

## Description

The GSettings class provides a convenient API for storing and retrieving application settings.

Reads and writes can be considered to be non-blocking. Reading settings with GSettings is typically extremely fast: on approximately the same order of magnitude (but slower than) a GHashTable lookup. Writing settings is also extremely fast in terms of time to return to your application, but can be extremely expensive for other threads and other processes. Many settings backends (including dconf) have lazy initialisation which means in the common case of the user using their computer without modifying any settings a lot of work can be avoided. For dconf, the D-Bus service doesn't even need to be started in this case. For this reason, you should only ever modify GSettings keys in response to explicit user action. Particular care should be paid to ensure that modifications are not made during startup -- for example, when setting the initial value of preferences widgets. The built-in `g_settings_bind()` functionality is careful not to write settings in response to notify signals as a result of modifications that it makes to widgets.

When creating a GSettings instance, you have to specify a schema that describes the keys in your settings and their types and default values, as well as some other information.

Normally, a schema has as fixed path that determines where the settings are stored in the conceptual global tree of settings. However, schemas can also be 'relocatable', i.e. not equipped with a fixed path. This is useful e.g. when the schema describes an 'account', and you want to be able to store a arbitrary number of accounts.

Unlike other configuration systems (like GConf), GSettings does not restrict keys to basic types like strings and numbers. GSettings stores values as GVariant, and allows any GVariantType for keys. Key names are restricted to lowercase characters, numbers and '-'. Furthermore, the names must begin with a lowercase character, must not end with a '-', and must not contain consecutive dashes.

Similar to GConf, the default values in GSettings schemas can be localized, but the localized values are stored in gettext catalogs and looked up with the domain that is specified in the `gettext-domain` attribute of the `<schemalist>` or `<schema>` elements and the category that is specified in the l10n attribute of the `<key>` element.

GSettings uses schemas in a compact binary form that is created by the glib-compile-schemas utility. The input is a schema description in an XML format that can be described by the following DTD:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73

    <!ELEMENT schemalist (schema|enum)* >
    <!ATTLIST schemalist gettext-domain #IMPLIED >

    <!ELEMENT schema (key|child|override)* >
    <!ATTLIST schema id             CDATA #REQUIRED
                     path           CDATA #IMPLIED
                     gettext-domain CDATA #IMPLIED
                     extends        CDATA #IMPLIED
                     list-of        CDATA #IMPLIED >

    <!-- enumerated and flags types -->
    <!-- each value element maps a nick to a numeric value -->
    <!ELEMENT enum (value*) >
    <!ATTLIST enum id CDATA #REQUIRED >

    <!ELEMENT flags (value*) >
    <!ATTLIST flags id CDATA #REQUIRED >

    <!ELEMENT value EMPTY >
    <!-- nick must be at least 2 characters long -->
    <!-- value must be parsable as a 32-bit integer -->
    <!ELEMENT value nick  #REQUIRED
                    value #REQUIRED >

    <!ELEMENT key (default|summary?|description?|range?|choices?|aliases?) >
    <!-- name can only contain lowercase letters, numbers and '-' -->
    <!-- type must be a GVariant type string -->
    <!-- enum must be the id of an enum type that has been defined earlier -->
    <!-- flags must be the id of a flags type that has been defined earlier -->
    <!-- exactly one of type, enum or flags must be given -->
    <!ATTLIST key name  CDATA #REQUIRED
                  type  CDATA #IMPLIED
                  enum  CDATA #IMPLIED
                  flags CDATA #IMPLIED >

    <!-- the default value is specified a a serialized GVariant,
         i.e. you have to include the quotes when specifying a string -->
    <!ELEMENT default (#PCDATA) >
    <!-- the presence of the l10n attribute marks a default value for
         translation, its value is the gettext category to use -->
    <!-- if context is present, it specifies msgctxt to use -->
    <!ATTLIST default l10n    (messages|time) #IMPLIED
                      context CDATA           #IMPLIED >

    <!ELEMENT summary (#PCDATA) >
    <!ELEMENT description (#PCDATA) >

    <!-- range is only allowed for keys with numeric type -->
    <!ELEMENT range EMPTY >
    <!-- min and max must be parseable as values of the key type and min < max -->
    <!ATTLIST range min CDATA #REQUIRED
                    max CDATA #REQUIRED >

    <!-- choices is only allowed for keys with string or string array type -->
    <!ELEMENT choices (choice+) >
    <!-- each choice element specifies one possible value -->
    <!ELEMENT choice EMPTY >
    <!ATTLIST choice value CDATA #REQUIRED >

    <!-- aliases is only allowed for keys with enumerated type or with choices -->
    <!ELEMENT aliases (alias+) >
    <!-- each alias element specifies an alias for one of the possible values -->
    <!ELEMENT alias EMPTY >
    <!ATTLIST alias value CDATA #REQUIRED >

    <!ELEMENT child EMPTY >
    <!ATTLIST child name   CDATA #REQUIRED
                    schema CDATA #REQUIRED >

    <!ELEMENT override (#PCDATA) >
    <!ATTLIST override name    CDATA #REQUIRED
                       l10n    CDATA #IMPLIED
                       context CDATA #IMPLIED >

glib-compile-schemas expects schema files to have the extension `.gschema.xml`

At runtime, schemas are identified by their id (as specified in the `id` attribute of the `<schema>` element). The convention for schema ids is to use a dotted name, similar in style to a D-Bus bus name, e.g. "org.gnome.SessionManager". In particular, if the settings are for a specific service that owns a D-Bus bus name, the D-Bus bus name and schema id should match. For schemas which deal with settings not associated with one named application, the id should not use StudlyCaps, e.g. "org.gnome.font-rendering".

In addition to GVariant types, keys can have types that have enumerated types. These can be described by a `<choice>`, `<enum>` or `<flags>` element, see Example 12, “Ranges, choices and enumerated types”. The underlying type of such a key is string, but you can use `g_settings_get_enum()`, `g_settings_set_enum()`, `g_settings_get_flags()`, `g_settings_set_flags()` access the numeric values corresponding to the string value of enum and flags keys.

Example 11. Default values

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    <schemalist>
      <schema id="org.gtk.Test" path="/tests/" gettext-domain="test">

        <key name="greeting" type="s">
          <default l10n="messages">"Hello, earthlings"</default>
          <summary>A greeting</summary>
          <description>
            Greeting of the invading martians
          </description>
        </key>

        <key name="box" type="(ii)">
          <default>(20,30)</default>
        </key>

      </schema>
    </schemalist>

Example 12. Ranges, choices and enumerated types

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42

    <schemalist>

      <enum id="org.gtk.Test.myenum">
        <value nick="first" value="1"/>
        <value nick="second" value="2"/>
      </enum>

      <flags id="org.gtk.Test.myflags">
        <value nick="flag1" value="1"/>
        <value nick="flag2" value="2"/>
        <value nick="flag3" value="4"/>
      </flags>

      <schema id="org.gtk.Test">

        <key name="key-with-range" type="i">
          <range min="1" max="100"/>
          <default>10</default>
        </key>

        <key name="key-with-choices" type="s">
          <choices>
            <choice value='Elisabeth'/>
            <choice value='Annabeth'/>
            <choice value='Joe'/>
          </choices>
          <aliases>
            <alias value='Anna' target='Annabeth'/>
            <alias value='Beth' target='Elisabeth'/>
          </aliases>
          <default>'Joe'</default>
        </key>

        <key name='enumerated-key' enum='org.gtk.Test.myenum'>
          <default>'first'</default>
        </key>

        <key name='flags-key' flags='org.gtk.Test.myflags'>
          <default>["flag1",flag2"]</default>
        </key>
      </schema>
    </schemalist>

### Vendor overrides

Default values are defined in the schemas that get installed by an application. Sometimes, it is necessary for a vendor or distributor to adjust these defaults. Since patching the XML source for the schema is inconvenient and error-prone, glib-compile-schemas reads so-called 'vendor override' files. These are keyfiles in the same directory as the XML schema sources which can override default values. The schema id serves as the group name in the key file, and the values are expected in serialized GVariant form, as in the following example:

    1
    2
    3

    [org.gtk.Example]
    key1='string'
    key2=1.5

glib-compile-schemas expects schema files to have the extension `.gschema.override`

### Binding

A very convenient feature of GSettings lets you bind GObject properties directly to settings, using `g_settings_bind()`. Once a GObject property has been bound to a setting, changes on either side are automatically propagated to the other side. GSettings handles details like mapping between GObject and GVariant types, and preventing infinite cycles.

This makes it very easy to hook up a preferences dialog to the underlying settings. To make this even more convenient, GSettings looks for a boolean property with the name "sensitivity" and automatically binds it to the writability of the bound setting. If this 'magic' gets in the way, it can be suppressed with the G_SETTINGS_BIND_NO_SENSITIVITY flag.

## Details

### GSettings

    typedef struct _GSettings GSettings;

### g_settings_new ()

    GSettings *         g_settings_new                      (const gchar *schema_id);

Creates a new GSettings object with the schema specified by `schema_id`.

Signals on the newly created GSettings object will be dispatched via the thread-default GMainContext in effect at the time of the call to `g_settings_new()`. The new GSettings will hold a reference on the context. See `g_main_context_push_thread_default()`.

`schema_id` : | the id of the schema
Returns : | a new GSettings object

Since 2.26

### g_settings_new_with_path ()

    GSettings *         g_settings_new_with_path            (const gchar *schema_id,
                                                             const gchar *path);

Creates a new GSettings object with the relocatable schema specified by `schema_id` and a given path.

You only need to do this if you want to directly create a settings object with a schema that doesn't have a specified path of its own. That's quite rare.

It is a programmer error to call this function for a schema that has an explicitly specified path.

`schema_id` : | the id of the schema
`path` : | the path to use
Returns : | a new GSettings object

Since 2.26

### g_settings_new_with_backend ()

    GSettings *         g_settings_new_with_backend         (const gchar *schema_id,
                                                             GSettingsBackend *backend);

Creates a new GSettings object with the schema specified by `schema_id` and a given GSettingsBackend.

Creating a GSettings object with a different backend allows accessing settings from a database other than the usual one. For example, it may make sense to pass a backend corresponding to the "defaults" settings database on the system to get a settings object that modifies the system default settings instead of the settings for this user.

`schema_id` : | the id of the schema
`backend` : | the GSettingsBackend to use
Returns : | a new GSettings object

Since 2.26

### g_settings_new_with_backend_and_path ()

    GSettings *         g_settings_new_with_backend_and_path
                                                            (const gchar *schema_id,
                                                             GSettingsBackend *backend,
                                                             const gchar *path);

Creates a new GSettings object with the schema specified by `schema_id` and a given GSettingsBackend and path.

This is a mix of `g_settings_new_with_backend()` and `g_settings_new_with_path()`.

`schema_id` : | the id of the schema
`backend` : | the GSettingsBackend to use
`path` : | the path to use
Returns : | a new GSettings object

Since 2.26

### g_settings_sync ()

    void                g_settings_sync                     (void);

Ensures that all pending operations for the given are complete for the default backend.

Writes made to a GSettings are handled asynchronously. For this reason, it is very unlikely that the changes have it to disk by the time `g_settings_set()` returns.

This call will block until all of the writes have made it to the backend. Since the mainloop is not running, no change notifications will be dispatched during this call (but some may be queued by the time the call is done).

### g_settings_get_value ()

    GVariant *          g_settings_get_value                (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored in `settings` for `key`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | a new GVariant

Since 2.26

### g_settings_set_value ()

    gboolean            g_settings_set_value                (GSettings *settings,
                                                             const gchar *key,
                                                             GVariant *value);

Sets `key` in `settings` to `value`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or for `value` to have the incorrect type, per the schema.

If `value` is floating then this function consumes the reference.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | a GVariant of the correct type
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_is_writable ()

    gboolean            g_settings_is_writable              (GSettings *settings,
                                                             const gchar *name);

Finds out if a key can be written or not

`settings` : | a GSettings object
`name` : | the name of a key
Returns : | `TRUE` if the key `name` is writable

Since 2.26

### g_settings_delay ()

    void                g_settings_delay                    (GSettings *settings);

Changes the GSettings object into 'delay-apply' mode. In this mode, changes to `settings` are not immediately propagated to the backend, but kept locally until `g_settings_apply()` is called.

`settings` : | a GSettings object

Since 2.26

### g_settings_apply ()

    void                g_settings_apply                    (GSettings *settings);

Applies any changes that have been made to the settings. This function does nothing unless `settings` is in 'delay-apply' mode; see `g_settings_delay()`. In the normal case settings are always applied immediately.

`settings` : | a GSettings instance

### g_settings_revert ()

    void                g_settings_revert                   (GSettings *settings);

Reverts all non-applied changes to the settings. This function does nothing unless `settings` is in 'delay-apply' mode; see `g_settings_delay()`. In the normal case settings are always applied immediately.

Change notifications will be emitted for affected keys.

`settings` : | a GSettings instance

### g_settings_get_has_unapplied ()

    gboolean            g_settings_get_has_unapplied        (GSettings *settings);

Returns whether the GSettings object has any unapplied changes. This can only be the case if it is in 'delayed-apply' mode.

`settings` : | a GSettings object
Returns : | `TRUE` if `settings` has unapplied changes

Since 2.26

### g_settings_get_child ()

    GSettings *         g_settings_get_child                (GSettings *settings,
                                                             const gchar *name);

Creates a 'child' settings object which has a base path of `base-path`/`name`, where `base-path` is the base path of `settings`.

The schema for the child settings object must have been declared in the schema of `settings` using a `<child>` element.

`settings` : | a GSettings object
`name` : | the name of the 'child' schema
Returns : | a 'child' settings object. [transfer full]

Since 2.26

### g_settings_reset ()

    void                g_settings_reset                    (GSettings *settings,
                                                             const gchar *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.

`settings` : | a GSettings object
`key` : | the name of a key

### g_settings_list_schemas ()

    const gchar * const * g_settings_list_schemas           (void);

Gets a list of the GSettings schemas installed on the system. The returned list is exactly the list of schemas for which you may call `g_settings_new()` without adverse effects.

This function does not list the schemas that do not provide their own paths (ie: schemas for which you must use `g_settings_new_with_path()`). See `g_settings_list_relocatable_schemas()` for that.

Returns : | a list of GSettings schemas that are available. The list must not be modified or freed. [element-type utf8][transfer none]

Since 2.26

### g_settings_list_relocatable_schemas ()

    const gchar * const * g_settings_list_relocatable_schemas
                                                            (void);

Gets a list of the relocatable GSettings schemas installed on the system. These are schemas that do not provide their own path. It is usual to instantiate these schemas directly, but if you want to you can use `g_settings_new_with_path()` to specify the path.

The output of this function, taken together with the output of `g_settings_list_schemas()` represents the complete list of all installed schemas.

Returns : | a list of relocatable GSettings schemas that are available. The list must not be modified or freed. [element-type utf8][transfer none]

Since 2.28

### g_settings_list_keys ()

    gchar **            g_settings_list_keys                (GSettings *settings);

Introspects the list of keys on `settings`.

You should probably not be calling this function from "normal" code (since you should already know what keys are in your schema). This function is intended for introspection reasons.

You should free the return value with `g_strfreev()` when you are done with it.

`settings` : | a GSettings object
Returns : | a list of the keys on `settings`. [transfer full][element-type utf8]

### g_settings_list_children ()

    gchar **            g_settings_list_children            (GSettings *settings);

Gets the list of children on `settings`.

The list is exactly the list of strings for which it is not an error to call `g_settings_get_child()`.

For GSettings objects that are lists, this value can change at any time and you should connect to the "children-changed" signal to watch for those changes. Note that there is a race condition here: you may request a child after listing it only for it to have been destroyed in the meantime. For this reason, `g_settings_get_child()` may return `NULL` even for a child that was listed by this function.

For GSettings objects that are not lists, you should probably not be calling this function from "normal" code (since you should already know what children are in your schema). This function may still be useful there for introspection reasons, however.

You should free the return value with `g_strfreev()` when you are done with it.

`settings` : | a GSettings object
Returns : | a list of the children on `settings`. [transfer full][element-type utf8]

### g_settings_get_range ()

    GVariant *          g_settings_get_range                (GSettings *settings,
                                                             const gchar *key);

Queries the range of a key.

This function will return a GVariant that fully describes the range of values that are valid for `key`.

The type of GVariant returned is `(sv)`. The string describes the type of range restriction in effect. The type and meaning of the value contained in the variant depends on the string.

If the string is `'type'` then the variant contains an empty array. The element type of that empty array is the expected type of value and all values of that type are valid.

If the string is `'enum'` then the variant contains an array enumerating the possible values. Each item in the array is a possible valid value and no other values are valid.

If the string is `'flags'` then the variant contains an array. Each item in the array is a value that may appear zero or one times in an array to be used as the value for this key. For example, if the variant contained the array `['x', 'y']` then the valid values for the key would be `[]`, `['x']`, `['y']`, `['x', 'y']` and `['y', 'x']`.

Finally, if the string is `'range'` then the variant contains a pair of like-typed values -- the minimum and maximum permissible values for this key.

This information should not be used by normal programs. It is considered to be a hint for introspection purposes. Normal programs should already know what is permitted by their own schema. The format may change in any way in the future -- but particularly, new forms may be added to the possibilities described above.

It is a programmer error to give a `key` that isn't contained in the schema for `settings`.

You should free the returned value with `g_variant_unref()` when it is no longer needed.

`settings` : | a GSettings
`key` : | the key to query the range of
Returns : | a GVariant describing the range

Since 2.28

### g_settings_range_check ()

    gboolean            g_settings_range_check              (GSettings *settings,
                                                             const gchar *key,
                                                             GVariant *value);

Checks if the given `value` is of the correct type and within the permitted range for `key`.

This API is not intended to be used by normal programs -- they should already know what is permitted by their own schemas. This API is meant to be used by programs such as editors or commandline tools.

It is a programmer error to give a `key` that isn't contained in the schema for `settings`.

`settings` : | a GSettings
`key` : | the key to check
`value` : | the value to check
Returns : | `TRUE` if `value` is valid for `key`

Since 2.28

### g_settings_get ()

    void                g_settings_get                      (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *format,
                                                             ...);

Gets the value that is stored at `key` in `settings`.

A convenience function that combines `g_settings_get_value()` with `g_variant_get()`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or for the GVariantType of `format` to mismatch the type given in the schema.

`settings` : | a GSettings object
`key` : | the key to get the value for
`format` : | a GVariant format string
`...` : | arguments as per `format`

Since 2.26

### g_settings_set ()

    gboolean            g_settings_set                      (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *format,
                                                             ...);

Sets `key` in `settings` to `value`.

A convenience function that combines `g_settings_set_value()` with `g_variant_new()`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or for the GVariantType of `format` to mismatch the type given in the schema.

`settings` : | a GSettings object
`key` : | the name of the key to set
`format` : | a GVariant format string
`...` : | arguments as per `format`
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_boolean ()

    gboolean            g_settings_get_boolean              (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored at `key` in `settings`.

A convenience variant of `g_settings_get()` for booleans.

It is a programmer error to give a `key` that isn't specified as having a boolean type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | a boolean

Since 2.26

### g_settings_set_boolean ()

    gboolean            g_settings_set_boolean              (GSettings *settings,
                                                             const gchar *key,
                                                             gboolean value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for booleans.

It is a programmer error to give a `key` that isn't specified as having a boolean type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_int ()

    gint                g_settings_get_int                  (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored at `key` in `settings`.

A convenience variant of `g_settings_get()` for 32-bit integers.

It is a programmer error to give a `key` that isn't specified as having a int32 type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | an integer

Since 2.26

### g_settings_set_int ()

    gboolean            g_settings_set_int                  (GSettings *settings,
                                                             const gchar *key,
                                                             gint value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for 32-bit integers.

It is a programmer error to give a `key` that isn't specified as having a int32 type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_uint ()

    guint               g_settings_get_uint                 (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored at `key` in `settings`.

A convenience variant of `g_settings_get()` for 32-bit unsigned integers.

It is a programmer error to give a `key` that isn't specified as having a uint32 type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | an unsigned integer

Since 2.30

### g_settings_set_uint ()

    gboolean            g_settings_set_uint                 (GSettings *settings,
                                                             const gchar *key,
                                                             guint value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for 32-bit unsigned integers.

It is a programmer error to give a `key` that isn't specified as having a uint32 type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.30

### g_settings_get_double ()

    gdouble             g_settings_get_double               (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored at `key` in `settings`.

A convenience variant of `g_settings_get()` for doubles.

It is a programmer error to give a `key` that isn't specified as having a 'double' type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | a double

Since 2.26

### g_settings_set_double ()

    gboolean            g_settings_set_double               (GSettings *settings,
                                                             const gchar *key,
                                                             gdouble value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for doubles.

It is a programmer error to give a `key` that isn't specified as having a 'double' type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_string ()

    gchar *             g_settings_get_string               (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored at `key` in `settings`.

A convenience variant of `g_settings_get()` for strings.

It is a programmer error to give a `key` that isn't specified as having a string type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | a newly-allocated string

Since 2.26

### g_settings_set_string ()

    gboolean            g_settings_set_string               (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for strings.

It is a programmer error to give a `key` that isn't specified as having a string type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_strv ()

    gchar **            g_settings_get_strv                 (GSettings *settings,
                                                             const gchar *key);

A convenience variant of `g_settings_get()` for string arrays.

It is a programmer error to give a `key` that isn't specified as having an array of strings type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | a newly-allocated, `NULL`-terminated array of strings, the value that is stored at `key` in `settings`. [array zero-terminated=1][transfer full]

Since 2.26

### g_settings_set_strv ()

    gboolean            g_settings_set_strv                 (GSettings *settings,
                                                             const gchar *key,
                                                             const gchar *const *value);

Sets `key` in `settings` to `value`.

A convenience variant of `g_settings_set()` for string arrays. If `value` is `NULL`, then `key` is set to be the empty array.

It is a programmer error to give a `key` that isn't specified as having an array of strings type in the schema for `settings`.

`settings` : | a GSettings object
`key` : | the name of the key to set
`value` : | the value to set it to, or `NULL`. [allow-none][array zero-terminated=1]
Returns : | `TRUE` if setting the key succeeded, `FALSE` if the key was not writable

Since 2.26

### g_settings_get_enum ()

    gint                g_settings_get_enum                 (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored in `settings` for `key` and converts it to the enum value that it represents.

In order to use this function the type of the value must be a string and it must be marked in the schema file as an enumerated type.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or is not marked as an enumerated type.

If the value stored in the configuration database is not a valid value for the enumerated type then this function will return the default value.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | the enum value

Since 2.26

### g_settings_set_enum ()

    gboolean            g_settings_set_enum                 (GSettings *settings,
                                                             const gchar *key,
                                                             gint value);

Looks up the enumerated type nick for `value` and writes it to `key`, within `settings`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or is not marked as an enumerated type, or for `value` not to be a valid value for the named type.

After performing the write, accessing `key` directly with `g_settings_get_string()` will return the 'nick' associated with `value`.

`settings` : | a GSettings object
`key` : | a key, within `settings`
`value` : | an enumerated value
Returns : | `TRUE`, if the set succeeds

### g_settings_get_flags ()

    guint               g_settings_get_flags                (GSettings *settings,
                                                             const gchar *key);

Gets the value that is stored in `settings` for `key` and converts it to the flags value that it represents.

In order to use this function the type of the value must be an array of strings and it must be marked in the schema file as an flags type.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or is not marked as a flags type.

If the value stored in the configuration database is not a valid value for the flags type then this function will return the default value.

`settings` : | a GSettings object
`key` : | the key to get the value for
Returns : | the flags value

Since 2.26

### g_settings_set_flags ()

    gboolean            g_settings_set_flags                (GSettings *settings,
                                                             const gchar *key,
                                                             guint value);

Looks up the flags type nicks for the bits specified by `value`, puts them in an array of strings and writes the array to `key`, within `settings`.

It is a programmer error to give a `key` that isn't contained in the schema for `settings` or is not marked as a flags type, or for `value` to contain any bits that are not value for the named type.

After performing the write, accessing `key` directly with `g_settings_get_strv()` will return an array of 'nicks'; one for each bit in `value`.

`settings` : | a GSettings object
`key` : | a key, within `settings`
`value` : | a flags value
Returns : | `TRUE`, if the set succeeds

### GSettingsGetMapping ()

    gboolean            (*GSettingsGetMapping)              (GVariant *value,
                                                             gpointer *result,
                                                             gpointer user_data);

The type of the function that is used to convert from a value stored in a GSettings to a value that is useful to the application.

If the value is successfully mapped, the result should be stored at `result` and `TRUE` returned. If mapping fails (for example, if `value` is not in the right format) then `FALSE` should be returned.

If `value` is `NULL` then it means that the mapping function is being given a "last chance" to successfully return a valid value. `TRUE` must be returned in this case.

`value` : | the GVariant to map, or `NULL`
`result` : | the result of the mapping. [out]
`user_data` : | the user data that was passed to `g_settings_get_mapped()`. [closure]
Returns : | `TRUE` if the conversion succeeded, `FALSE` in case of an error

### g_settings_get_mapped ()

    gpointer            g_settings_get_mapped               (GSettings *settings,
                                                             const gchar *key,
                                                             GSettingsGetMapping mapping,
                                                             gpointer user_data);

Gets the value that is stored at `key` in `settings`, subject to application-level validation/mapping.

You should use this function when the application needs to perform some processing on the value of the key (for example, parsing). The `mapping` function performs that processing. If the function indicates that the processing was unsuccessful (due to a parse error, for example) then the mapping is tried again with another value.

This allows a robust 'fall back to defaults' behaviour to be implemented somewhat automatically.

The first value that is tried is the user's setting for the key. If the mapping function fails to map this value, other values may be tried in an unspecified order (system or site defaults, translated schema default values, untranslated schema default values, etc).

If the mapping function fails for all possible values, one additional attempt is made: the mapping function is called with a `NULL` value. If the mapping function still indicates failure at this point then the application will be aborted.

The result parameter for the `mapping` function is pointed to a gpointer which is initially set to `NULL`. The same pointer is given to each invocation of `mapping`. The final value of that gpointer is what is returned by this function. `NULL` is valid; it is returned just as any other value would be.

`settings` : | a GSettings object
`key` : | the key to get the value for
`mapping` : | the function to map the value in the settings database to the value used by the application. [scope call]
`user_data` : | user data for `mapping`
Returns : | the result, which may be `NULL`. [transfer full]

### enum GSettingsBindFlags

    typedef enum {
      G_SETTINGS_BIND_DEFAULT,
      G_SETTINGS_BIND_GET            = (1<<0),
      G_SETTINGS_BIND_SET            = (1<<1),
      G_SETTINGS_BIND_NO_SENSITIVITY = (1<<2),
      G_SETTINGS_BIND_GET_NO_CHANGES = (1<<3),
      G_SETTINGS_BIND_INVERT_BOOLEAN = (1<<4)
    } GSettingsBindFlags;

Flags used when creating a binding. These flags determine in which direction the binding works. The default is to synchronize in both directions.

`G_SETTINGS_BIND_DEFAULT` | Equivalent to `G_SETTINGS_BIND_GET|G_SETTINGS_BIND_SET`
`G_SETTINGS_BIND_GET` | Update the GObject property when the setting changes. It is an error to use this flag if the property is not writable.
`G_SETTINGS_BIND_SET` | Update the setting when the GObject property changes. It is an error to use this flag if the property is not readable.
`G_SETTINGS_BIND_NO_SENSITIVITY` | Do not try to bind a "sensitivity" property to the writability of the setting
`G_SETTINGS_BIND_GET_NO_CHANGES` | When set in addition to G_SETTINGS_BIND_GET, set the GObject property value initially from the setting, but do not listen for changes of the setting
`G_SETTINGS_BIND_INVERT_BOOLEAN` | When passed to `g_settings_bind()`, uses a pair of mapping functions that invert the boolean value when mapping between the setting and the property. The setting and property must both be booleans. You cannot pass this flag to `g_settings_bind_with_mapping()`.

### g_settings_bind ()

    void                g_settings_bind                     (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             GSettingsBindFlags flags);

Create a binding between the `key` in the `settings` object and the property `property` of `object`.

The binding uses the default GIO mapping functions to map between the settings and property values. These functions handle booleans, numeric types and string types in a straightforward way. Use `g_settings_bind_with_mapping()` if you need a custom mapping, or map between types that are not supported by the default mapping functions.

Unless the `flags` include `G_SETTINGS_BIND_NO_SENSITIVITY`, this function also establishes a binding between the writability of `key` and the "sensitive" property of `object` (if `object` has a boolean property by that name). See `g_settings_bind_writable()` for more details about writable bindings.

Note that the lifecycle of the binding is tied to the object, and that you can have only one binding per object property. If you bind the same property twice on the same object, the second binding overrides the first one.

`settings` : | a GSettings object
`key` : | the key to bind
`object` : | a GObject. [type GObject.Object]
`property` : | the name of the property to bind
`flags` : | flags for the binding

Since 2.26

### g_settings_bind_with_mapping ()

    void                g_settings_bind_with_mapping        (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             GSettingsBindFlags flags,
                                                             GSettingsBindGetMapping get_mapping,
                                                             GSettingsBindSetMapping set_mapping,
                                                             gpointer user_data,
                                                             GDestroyNotify destroy);

Create a binding between the `key` in the `settings` object and the property `property` of `object`.

The binding uses the provided mapping functions to map between settings and property values.

Note that the lifecycle of the binding is tied to the object, and that you can have only one binding per object property. If you bind the same property twice on the same object, the second binding overrides the first one.

`settings` : | a GSettings object
`key` : | the key to bind
`object` : | a GObject. [type GObject.Object]
`property` : | the name of the property to bind
`flags` : | flags for the binding
`get_mapping` : | a function that gets called to convert values from `settings` to `object`, or `NULL` to use the default GIO mapping
`set_mapping` : | a function that gets called to convert values from `object` to `settings`, or `NULL` to use the default GIO mapping
`user_data` : | data that gets passed to `get_mapping` and `set_mapping`
`destroy` : | GDestroyNotify function for `user_data`

Since 2.26

### g_settings_bind_writable ()

    void                g_settings_bind_writable            (GSettings *settings,
                                                             const gchar *key,
                                                             gpointer object,
                                                             const gchar *property,
                                                             gboolean inverted);

Create a binding between the writability of `key` in the `settings` object and the property `property` of `object`. The property must be boolean; "sensitive" or "visible" properties of widgets are the most likely candidates.

Writable bindings are always uni-directional; changes of the writability of the setting will be propagated to the object property, not the other way.

When the `inverted` argument is `TRUE`, the binding inverts the value as it passes from the setting to the object, i.e. `property` will be set to `TRUE` if the key is not writable.

Note that the lifecycle of the binding is tied to the object, and that you can have only one binding per object property. If you bind the same property twice on the same object, the second binding overrides the first one.

`settings` : | a GSettings object
`key` : | the key to bind
`object` : | a GObject. [type GObject.Object]
`property` : | the name of a boolean property to bind
`inverted` : | whether to 'invert' the value

Since 2.26

### g_settings_unbind ()

    void                g_settings_unbind                   (gpointer object,
                                                             const gchar *property);

Removes an existing binding for `property` on `object`.

Note that bindings are automatically removed when the object is finalized, so it is rarely necessary to call this function.

`object` : | the object
`property` : | the property whose binding is removed

Since 2.26

### GSettingsBindSetMapping ()

    GVariant *          (*GSettingsBindSetMapping)          (const GValue *value,
                                                             const GVariantType *expected_type,
                                                             gpointer user_data);

The type for the function that is used to convert an object property value to a GVariant for storing it in GSettings.

`value` : | a GValue containing the property value to map
`expected_type` : | the GVariantType to create
`user_data` : | user data that was specified when the binding was created
Returns : | a new GVariant holding the data from `value`, or `NULL` in case of an error

### GSettingsBindGetMapping ()

    gboolean            (*GSettingsBindGetMapping)          (GValue *value,
                                                             GVariant *variant,
                                                             gpointer user_data);

The type for the function that is used to convert from GSettings to an object property. The `value` is already initialized to hold values of the appropriate type.

`value` : | return location for the property value
`variant` : | the GVariant
`user_data` : | user data that was specified when the binding was created
Returns : | `TRUE` if the conversion succeeded, `FALSE` in case of an error

## Property Details

### The `"backend"` property

      "backend"                  GSettingsBackend*     : Read / Write / Construct Only

The GSettingsBackend for this settings object.

### The `"delay-apply"` property

      "delay-apply"              gboolean              : Read

Whether the GSettings object is in 'delay-apply' mode. See `g_settings_delay()` for details.

Default value: FALSE

Since 2.28

### The `"has-unapplied"` property

      "has-unapplied"            gboolean              : Read

If this property is `TRUE`, the GSettings object has outstanding changes that will be applied when `g_settings_apply()` is called.

Default value: FALSE

### The `"path"` property

      "path"                     gchar*                : Read / Write / Construct Only

The path within the backend where the settings are stored.

Default value: NULL

### The `"schema"` property

      "schema"                   gchar*                : Read / Write / Construct Only

### Warning

`GSettings:schema` has been deprecated since version 2.32 and should not be used in newly-written code. Use the 'schema-id' property instead. In a future version, this property may instead refer to a GSettingsSchema.

The name of the schema that describes the types of keys for this GSettings object.

The type of this property is *not* GSettingsSchema. GSettingsSchema has only existed since version 2.32 and unfortunately this name was used in previous versions to refer to the schema ID rather than the schema itself. Take care to use the 'settings-schema' property if you wish to pass in a GSettingsSchema.

Default value: NULL

### The `"schema-id"` property

      "schema-id"                gchar*                : Read / Write / Construct Only

The name of the schema that describes the types of keys for this GSettings object.

Default value: NULL

### The `"settings-schema"` property

      "settings-schema"          GSettingsSchema*      : Read / Write / Construct Only

The GSettingsSchema describing the types of keys for this GSettings object.

Ideally, this property would be called 'schema'. GSettingsSchema has only existed since version 2.32, however, and before then the 'schema' property was used to refer to the ID of the schema rather than the schema itself. Take care.

## Signal Details

### The `"change-event"` signal

    gboolean            user_function                      (GSettings *settings,
                                                            gpointer   keys,
                                                            gint       n_keys,
                                                            gpointer   user_data)      : Run Last

The "change-event" signal is emitted once per change event that affects this settings object. You should connect to this signal only if you are interested in viewing groups of changes before they are split out into multiple emissions of the "changed" signal. For most use cases it is more appropriate to use the "changed" signal.

In the event that the change event applies to one or more specified keys, `keys` will be an array of GQuark of length `n_keys`. In the event that the change event applies to the GSettings object as a whole (ie: potentially every key has been changed) then `keys` will be `NULL` and `n_keys` will be 0.

The default handler for this signal invokes the "changed" signal for each affected key. If any other connected handler returns `TRUE` then this default functionality will be suppressed.

`settings` : | the object on which the signal was emitted
`keys` : | an array of GQuarks for the changed keys, or `NULL`. [array length=n_keys][element-type GQuark][allow-none]
`n_keys` : | the length of the `keys` array, or 0
`user_data` : | user data set when the signal handler was connected.
Returns : | `TRUE` to stop other handlers from being invoked for the event. FALSE to propagate the event further.

### The `"changed"` signal

    void                user_function                      (GSettings *settings,
                                                            gchar     *key,
                                                            gpointer   user_data)      : Has Details

The "changed" signal is emitted when a key has potentially changed. You should call one of the `g_settings_get()` calls to check the new value.

This signal supports detailed connections. You can connect to the detailed signal "changed::x" in order to only receive callbacks when key "x" changes.

`settings` : | the object on which the signal was emitted
`key` : | the name of the key that changed
`user_data` : | user data set when the signal handler was connected.

### The `"writable-change-event"` signal

    gboolean            user_function                      (GSettings *settings,
                                                            guint      key,
                                                            gpointer   user_data)      : Run Last

The "writable-change-event" signal is emitted once per writability change event that affects this settings object. You should connect to this signal if you are interested in viewing groups of changes before they are split out into multiple emissions of the "writable-changed" signal. For most use cases it is more appropriate to use the "writable-changed" signal.

In the event that the writability change applies only to a single key, `key` will be set to the GQuark for that key. In the event that the writability change affects the entire settings object, `key` will be 0.

The default handler for this signal invokes the "writable-changed" and "changed" signals for each affected key. This is done because changes in writability might also imply changes in value (if for example, a new mandatory setting is introduced). If any other connected handler returns `TRUE` then this default functionality will be suppressed.

`settings` : | the object on which the signal was emitted
`key` : | the quark of the key, or 0
`user_data` : | user data set when the signal handler was connected.
Returns : | `TRUE` to stop other handlers from being invoked for the event. FALSE to propagate the event further.

### The `"writable-changed"` signal

    void                user_function                      (GSettings *settings,
                                                            gchar     *key,
                                                            gpointer   user_data)      : Has Details

The "writable-changed" signal is emitted when the writability of a key has potentially changed. You should call `g_settings_is_writable()` in order to determine the new status.

This signal supports detailed connections. You can connect to the detailed signal "writable-changed::x" in order to only receive callbacks when the writability of "x" changes.

`settings` : | the object on which the signal was emitted
`key` : | the key
`user_data` : | user data set when the signal handler was connected.