Skip to content
Commit e0910397 authored by Daniel P. Berrange's avatar Daniel P. Berrange
Browse files

Rewrite keymap code to work on more platforms

The current keymap code assumes an Xorg server on Linux with
either evdev or kbd drivers. This adds heuristics to detect
XQuartz (Xorg on OS-X) and XWin (Xorg on Cygwin). Further it
adds support for native GDK on OS-X and Win32.

It is not possible to assume that keycodes < 87 have a 1-1
mapping to RFB (XT) keycodes. Thus the keymap arrays must
have a complete dataset, all special casing is removed.

All master  keymaps are defined in a CSV file. THis covers
Linux keycodes, OSX keycodes, AT set1, 2 & 3, XT keycodes,
the XT encoding used by the Linux KBD driver, USB keycodes,
Win32 keycodes, the XT encoding used by Xorg on Cygwin,
the XT encoding used by Xorg on Linux with kbd driver.

Further RFB and final Xorg driver mappings are derived
from these master maps automatically. The keymap-gen.pl
tool can generate lookup tables between all possible
keycode sets as required.

eg To generate a map from native Win32 keycodes to RFB
keycodes

   keymap-gen.pl keymaps.csv win32 rfb

* gtk-vnc.spec.in, mingw32-gtk-vnc.spec.in: Require Text::CSV
  for generating keymaps
* src/Makefile.am: Generate keymaps dynamically
* src/keymap-gen.pl: Tool to generate keymaps from CSV file
* src/keymaps.csv: Master keymap definitions
* src/vncconnection.c: Improve keypress log message
* src/vncdisplay.c: Convert to guint16 for keymap table
* src/vncdisplaykeymap.c, src/vncdisplaykeymap.h: Use a
  new dynamically generated, full keymap.
parent a88d12ce
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment