Blob Blame History Raw

There are a number of problematic special cases in XKB. The issues 
mentioned here are at most partly resolved.
 
1. The are several XxxDoodad structures defined in xkb.xml. They are used
   in a few lists, but in a rather special way: 
   The struct "CommonDoodad" is supposed to be a rather generic data type, 
   combining the most basic Doodad fields that are common in all these structures. 
   All Doodads are encapsulated in a union type simply called "Doodad". 
   Now this union is used in subsequent list definitions, aiming at a kind of 
   'polymorphism': From inspection of the protocol and Xlib, the Doodads are to 
   be discriminated based on their type field.
   However the special meaning of the type field is not encoded in the protocol. 
   Furthermore the TextDoodad and the LogoDoodad are variable size types due to
   some fields of type CountedString16, thereby turning the union into a 
   possibly variable size type as well. 
   However, for lists with variable size elements, special sizeof functions are 
   required. These cannot be autogenerated as it cannot be referred which 
   Doodad type to use for the union. 
   Therefore, the Doodad type structures are unsupported at the moment. 

2. There are still some bugs in xkb.xml: Either certain fields are missing
   that are required by the protocol, or Xlib simply has another understanding
   of the protocol. 

3. The interface for accessors should be reviewed. 

4. Currently some bitcases carry 'name' attributes. These could be avoided if 
   the data within would consist of a singe struct field only. 

5. switch could get a 'fixed_size' attribute, so when rewriting valueparam to switch, 
   an uint32_t * pointer could be used instead of void *. 

6. The automatic inclusion of padding requires some complicated coding in the 
   generator. This is errorprone and could be avoided if all padding is explicitly
   given in the protocol definition. For variable size fields that require padding, 
   the pad tag could get a 'fieldref' attribute. That way padding could be handled
   a lot easier in the autogenerator.