The _XSETTINGS_SETTINGS property is of form 8 and type _XSETTINGS_SETTINGS. The contents are a

 1	CARD8    byte-order
 3               unused
 4      CARD32   SERIAL
 4      CARD32   N_SETTINGS

Followed by N_SETTINGS settings records, which have a header:

 1      SETTING_TYPE  type
 1                    unused
 2      n             name-len
 n      STRING8       name
 P                    unused, p=pad(n)
 4      CARD32        last-change-serial


 0  XSettingsTypeInteger
 1  XSettingsTypeString
 2  XSettingsTypeColor

followed by the body. If TYPE = XSettingsTypeString the body is:

 4      n             value-len
 n      STRING8       value
 P                    unused, p=pad(n)

If TYPE == XSettingsTypeInteger, then the body is:

 4      INT32         value

If TYPE == XSettingsTypeColor, then the body is:

 2      CARD16        red
 2      CARD16        green
 2      CARD16        blue
 2      CARD16        alpha

If the setting does not need the alpha field, it should be set to 65535.

Setting names must be confined to the ascii characters:

 'A'-'Z' 'a'-'z' '0'-'9' '_' and '/'

With the additional restrictions that '/' cannot appear in the leading or trailing position, that two occurences of '/' cannot be consecutive, and that the first character of the name, and and the first character after a slash cannot be one of '0'-'9'. Names may not be empty.



are legitimate names, while


Are not legitimate names.

The names, types, contents, and default values of standard settings will be separately agreed upon.

Names beginning with 'Net/' and case variants of that string are reserved and must not be used without prior agreement.

The 'serial' field and and the 'last-change-serial' field of the each settings record can be used to tell which settings have changed since the last time a client retrieved the _XSETTINGS_SETTINGS property. Each time the client retrieves the contents of the _XSETTINGS_SETTINGS property it should store the contents of the 'serial' field. When it next retrieves the property, any settings whose 'last-change-serial' is greater than the stored value.

(Careful clients will make provisions for wrap-around of the serial field. This is, however, not expected to happen in practice.)