Xfconf Backends
---------------

Xfconf backends act as the actual configuration store.  A backend might
write flat files to disk, XML files to disk, rows to a relational
database, entries to an LDAP server, or any other possible mechanism
desired to persistently store the data.

A backend must implement the XfconfBackend interface, which is described
in the API documentation.

The backend will have to deal with a variety of data types.  While some
of these types are wrapped directly in the client library (e.g.,
xfconf_channel_set_uint64()), users of the library can also set other,
semi-arbitrary types, as well as array types.

So, the backend must, be able to understand the following GTypes:

G_TYPE_STRING
G_TYPE_UCHAR
G_TYPE_CHAR
G_TYPE_UINT
G_TYPE_INT
G_TYPE_UINT64
G_TYPE_INT64
G_TYPE_FLOAT
G_TYPE_DOUBLE
G_TYPE_BOOLEAN

Note about 16-bit values: dbus-glib does not support sending 16-bit signed
and unsigned integers over D-Bus, even though libdbus does.  For convenience,
libxfconf will take any 16-bit values it receives and convert them into
32-bit values before sending them to the daemon.  From the daemon/backend
point of view, 16-bit values are simply not supported.

In addition, the backend must be able to handle arrays of arbitrary
types from the above list.  A single array may hold multiple values
of the same type, or of different types.  Because of this, an array is
sent over the bus as a GValue which holds a GPtrArray which holds an
array of GValues (which of course hold the actual values).  The GType
of each value in the array must be checked, of course, as the array
elements may be of different types.
