Revision control
++ IVI-shell
++ =========
++
++ IVI-shell provides a shell interface for Weston, which maps the GENIVI
++ API (http://www.genivi.org) for In-Vehicle Infotainment as Wayland-Ivi-Extension
++
++ This module includes two protocols: ivi-application (provided by weston), and
++ ivi-controller (provided by GENIVI's wayland-ivi-extension).
++ In IVI use case, the client creates and destroys a surface using a
++ unique ID acquired from the ivi-application protocol.
++ On the other hand, a controller (such as the HMI Controller) manages a set of
++ properties (visibility, position, size, etc.),
++ created using unique IDs provided by the ivi-controller protocol.
++ A Unique ID is necessary to create and control both the ivi-surface and
++ the ivi-layer, however Qt has no API for setting these IDs.
++
++ The ivi-shell plugin works around this limitation by setting the unique ID via
++ the environment variable QT_IVI_SURFACE_ID, used for both ivi-surface and
++ ivi-layer. If an application needs more than two surfaces,
++ ivi-surface IDs will be incremented automatically. If QT_IVI_SURFACE_ID is
++ not set, ivi-surface and ivi-layer IDs will be generated internally.
++ QT_IVI_SURFACE_ID is a 32 bit value composed of the process ID and the
++ surface ID. Bits 0 to 22 represent the process ID, and bits 23 to 32 represent
++ the surface ID in a process.
++ For example, when the process ID is 0x765 and there are two surfaces,
++ ivi-layer ID is 0x765 and ivi-surface IDs are 0x765 and 0x00400765.
++ +------------+---------------------------+
++ |31 23|22 0|
++ +------------+---------------------------+
++ |0000 0000 00|00 0000 0000 0000 0000 0000|
++ |<- ID ->|<- process ID ->|
++ +------------+---------------------------+