Each value to be set must be an appropriate datum, matching the data type imposed by the semantics of the argument.
The XSetICValues can generate BadAtom, BadColor, BadCursor, BadPixmap, and BadWindow errors.
The XGetICValues function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be obtained. An argument could not be obtained for any of the following reasons:
Each IC attribute value argument (following a name) must point to a location where the IC value is to be stored. That is, if the IC value is of type T, the argument must be of type T*. If T itself is a pointer type, then XGetICValues allocates memory to store the actual data, and the client is responsible for freeing this data by calling XFree with the returned pointer. The exception to this rule is for an IC value of type XNVaNestedList (for preedit and status attributes). In this case, the argument must also be of type XVaNestedList. Then, the rule of changing type T to T* and freeing the allocated data applies to each element of the nested list.