|SOURCE|
[Linux::System::LinuxInputManager]
* Fixed issue #3 by using a for loop instead of calling while( XPending( ) ),
  as it would appear new events are being generated which are not being handled
  correctly when the XPending function returns the newly added events
|MERGE|
origin/unstable -> system_input
Merge remote-tracking branch 'origin/renderer_text' into system_input
Started to work on using XInput for handling input devices on Linux

|SOURCE|
[Common::Arithmetic::Arithmetic]
* There is a macro "Absolute" in XI.h which will replace the
  Arithmetic::Absolute with the value Arithmetic::1, it is #undef'd to make
  sure it doesn't interfere with the function name
[Common::System::InputDevice]
* Started to add XDevice information for the Linux build
[Common::System::InputManager]
* InputManager has an array of input devices instead of one device per input
  type
[Linux::LinuxInputManager]
* NATIVEINPUT serves as a way to attain the input device state
* Initialise initialised on a per-device type basis each input device detected
  and stores them in the real input device list
The four-component constructor is no longer inline

|SOURCE|
[Common::Arithmetic::Quaternion]
* Removed ZED_INLINE from the four-component constructor, as it is no longer
  inline
[Linux] Added the strip flag for the Release build and O3 for the Profile build

|BUILD CONFIGURATION|
[Linux::MakefileCommon]
* Added the -s (strip) flag for Release builds
* Added the -O3 (optimisation level 3) flag for Profile builds
Merge remote-tracking branch 'origin/build_configuration' into system_input
Merge remote-tracking branch 'origin/arithmetic_quaternion' into system_input
[Linux] Using XInput to select events from an XInput mouse

|SOURCE|
[Linux::System::LinuxInputManager]
* Added an XEvent type to mouse mapping member variable
* AddDevice will add the event type for the mouse and map it to the mouse
  device's motion notify event
* Update iterates over the available mouse motion notify events and checks the
  event type, to see if it matches, if it does, then it will use the
  XDeviceMotionNotifyEvent and not process any more events for the iteration
Merge remote-tracking branch 'origin/system_input' into system_input
[Linux] Keyboard input is registered in LinuxInputManager::Initialise

|SOURCE|
[Linux::System::LinuxInputManager]
* Initialise adds any keyboards detected to the list of input devices
InputManager's Initialise takes a WINDOWDATA parameter

|SOURCE|
* InputDevice.cpp moved from the incorrect Linux directory to the Common
  directory
[Common::System::InputDevice]
* Added IsConnected to determine if the device is connected to the machine,
  this can be updated by the InputManager for the user to discern whether or
  not to attempt to get a device's state
[Common::System::InputManager]
* Initialise requires a WINDOWDATA struct to be passed in as a parameter, this
  is to make the interface less cumbersome for the user not needing to use
  SetWindowData or use a different constructor, and then initialise
* SetWindowData removed
[Linux::System::LinuxInputManager]
* Removed the WINDOWDATA constructor
* Removed SetWindowData
* Added WINDOWDATA as a parameter to Initialise, replacing the functionality of
  SetWindowData
InputDevice is able to be an individual device or a unified device

|SOURCE|
[Common::System::InputDevice]
* IsUnified returns whether this device is receiving the device messages from
  one device type as an individual or as a unified device interface
* SetUnified sets the device to receive input from all of one device type
* SetIndividual sets the device to receive input from a single device
[Linux] LinuxInputManager's AddDevice checks if the device is unified or not

|SOURCE|
[Linux::System::LinuxInputManager]
* AddDevice checks if the device is unified or an individual device before
  attempting to iterate over the set of available devices to determine if there
  is an individual device available
When the mouse is moved, the co-ordinates are sent to the requesting device

|SOURCE|
[Linux/System/LinuxInputManager]
* Update checks for the individual mouse device movements and sets the
  co-ordinates on a per-mouse basis if requested
[Linux] Added unifed mouse and keyboard support

|SOURCE|
[Linux/System/LinuxInputManager]
* AddDevice allows for devices to be added as a unified input device (i.e. all
  keyboards are able to be used as one input device)
XInput selects non-virtual non-XTEST devices and queries their state

|SOURCE|
[Linux/System/InputManager]
* No longer is the input for individual devices using the X event system,
  instead it uses the XQueryDeviceState interface to get the device's input
* Devices reported as "XTEST Device" or "Virtual Device" are not considered as
  being "real" devices, as such they are not added to the input list
* Keyboard input is working as it would if the unified device were used, except
  it reports only for one keyboard device
* The pointer is not currently functioning (as the position is relative to the
  root window, resulting in the co-ordinates not being correct if centering to
  a window, for example)
[Common/System/Keyboard]
* State member function verifies the state parameter is a valid pointer before
  attempting to copy the key array
Mouse movement is adjusted for the screen position relative to the root

|SOURCE|
[Linux/System/LinuxInputManager]
* Disabled the button state updating code as it doesn't currently have any
  function beyond reporting the button status to the terminal
* Initialise gets the window's X and Y position relative to the root window,
  which should be the desktop, this is used to adjust the X and Y position when
  the pointer is moved