Test protocol for keyboard handling
===================================

Platform specific tests/issues are marked with [].

Client
------

- Normal symbols:

  - ASCII characters
  - Latin 1 character
  - Unicode BMP characters
  - Unicode non-BMP characters

- Dead keys:

  - Grave
  - Acute
  - Circumflex
  - Tilde
  - Macron
  - Breve
  - Dot above
  - Diaeresis
  - Ring above
  - Double acute
  - Caron
  - Cedilla
  - Ogonek
  - Ypogegrammeni
  - Katakana voiced mark
  - Katakana semi-voiced mark
  - Dialytika tonos
  - FIXME: Many more that we currently probably don't support

  - No composition on client

- Modifiers:

  - CapsLock, NumLock (sent but ignored by server)
  - Shift, Ctrl
  - Alt, AltGr, Super [Win, X11] (FIXME: AltGr broken on Win)
  - Left/right identification (FIXME: broken for Shift on Win)
  - CmdL => AltL, CmdR => SuperL, AltL => ModeSwitch, AltR => Level3Shift [Mac]
  - Hyper sends Super [X11]

  - CapsLock, Shift and AltGr affect symbol lookup
  - NumLock affects symbol lookup [Win, X11]
  - Ctrl does not affect symbol lookup
  - Shift inverts NumLock behaviour [X11]
  - Shift turns NumLock off, but not on [Win] (FIXME: fake Shifts also sent)
  - CtrlL+AltR fake release [Win]
  - Ctrl+Alt+any (note behaviour above though)
  - Ctrl+AltGr+any (FIXME: broken on Win)
  - "Shift press, A press, Shift release, A release" should not send "a release"

- Numpad:

  - Numpad specific symbols are sent
  - Affected by NumLock
  - Decimal key should send Decimal for layouts with . as a symbol, and
    Separator for layouts with , as a symbol

- Multimedia keys:

  - Back, Forward, Refresh, Stop
  - HomePage, Search, Favourites
  - Mail, Calculator
  - Volume up, down, mute
  - Media next, previous, stop, play
  - Sleep
  - FIXME: probably more keys exist

- Non-character keys:

  - F1-F24
  - Tab, Space, Backspace, Return
  - LeftTab sends Tab
  - Esc, PrntScrn, ScrollLock, Pause
  - Insert, Delete, Home, End, PageUp, PageDown
  - Arrow keys
  - Menu
  - Alt+PrntScrn sends Sys_Req [Win]

- French layout (AZERTY and inverted shift behaviour for many keys)

- Key repeat should not send repeated release events

- Keys are released on loss of focus

- Local layout changes are respected

- Local input methods are disabled/enabled with focus

- System keys should be grabbed in full screen

  The exact keys depends on the system and configuration, but it
  is usually variants of these:

  - Alt+Tab
  - Super (and Super+other)
  - Multimedia keys
  - Ctrl+Alt+Delete
  - Ctrl+Esc
  - F8-F12

- Virtual keyboard (as much of the above as is possible)
