This is an import of the DConfChangeset API. It will eventually be used
as the primary way of communicating changesets between GSettings and
various GSettingsBackend implementations.
It will also be useful in simplifying the implementation of several
GSettingsBackend implementations contained within GLib as well as some
new ones being authored outside of it.
GSettingsBackend has always more or less represented a 'dconf-like'
database structure, which is why DConfChangeset is a generally useful
thing to have as part of the GSettingsBackend API.
Add helpers for checking if a string is a valid GSettingsBackend
[path|key|dir].
These helpers match equivalent functions found in dconf and will be used
for assertion checking when adding GSettingsBackendChangeset.
GSettingsBackend is not part of the public API of GLib, so its
g_autoptr() declarations should not be included in the public headers.
Move them into gsettingsbackend.h.
This will get the 'user' value from the database (ie: the one that the user has
control over).
Provide a default implementation that chains to ->read(). That will work for
all of our internal backends which don't have a concept of layering or
lockdown.
The delayed backend implments "user value" by returning anything that's
in the changeset (incuding an explicit NULL) or chaining up otherwise.
We will use this for g_settings_get_user_value().
https://bugzilla.gnome.org/show_bug.cgi?id=668233
Add the GLIB_AVAILABLE_IN_ALL annotation to all old functions (that
haven't already been annotated with the GLIB_AVAILABLE_IN_* macros or a
deprecation macro).
If we discover in the future that we cannot use only one macro on
Windows, it will be an easy sed patch to fix that.
https://bugzilla.gnome.org/show_bug.cgi?id=688681
Since #include <gsettingsbackend.h> is a perfectly valid thing for
applications to do, and since we want to include gio headers from
gsettingsbackend.h, we need to effectively disable the #error we would
get from those headers (because we're not coming via gio.h).
We don't want to #include <gio/gio.h> here because this would cause
needless rebuilding of GSettingsBackend, GSettings,
GDelayedSettingsBackend, etc... every time someone changed anything in
any public header.