[Spice-commits] 2 commits - configure.ac .gitmodules src/keycodemapdb src/keymap-gen.pl src/keymaps.csv src/Makefile.am tools/spicy.c

Pavel Grunt pgrunt at kemper.freedesktop.org
Mon Mar 6 08:51:50 UTC 2017


 .gitmodules       |    3 
 configure.ac      |   11 -
 src/Makefile.am   |   30 +--
 src/keycodemapdb  |    1 
 src/keymap-gen.pl |  214 ----------------------
 src/keymaps.csv   |  511 ------------------------------------------------------
 tools/spicy.c     |   63 ++++++
 7 files changed, 80 insertions(+), 753 deletions(-)

New commits:
commit e271222e2217bf82644d87649b43b920240430f8
Author: Daniel P. Berrange <berrange at redhat.com>
Date:   Thu Mar 2 10:07:38 2017 +0000

    Switch over to using keycodemapdb submodule
    
    Consume the keymaps.csv file from a git submodule instead of having
    a private copy. This makes it easier to ensure all users of the keymap
    (libvirt, gtk-vnc, spice-gtk, and eventually QEMU) to have a consistent
    set of data.
    
    Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
    Acked-by: Pavel Grunt <pgrunt at redhat.com>

diff --git a/.gitmodules b/.gitmodules
index 0c618ee..82467e4 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "spice-common"]
 	path = spice-common
 	url = ../spice-common
+[submodule "src/keycodemapdb"]
+	path = src/keycodemapdb
+	url = https://gitlab.com/keycodemap/keycodemapdb.git
diff --git a/configure.ac b/configure.ac
index 463fbe0..763d14b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -86,17 +86,6 @@ AC_SUBST(SPICE_GTK_MICRO_VERSION)
 dnl =========================================================================
 dnl Chek optional features
 
-srcdir="$(dirname $0)"
-if test ! -e "$srcdir/src/vncdisplaykeymap_osx2xtkbd.c"; then
-  AC_MSG_CHECKING([for Text::CSV Perl module])
-  perl -MText::CSV -e "" >/dev/null 2>&1
-  if test $? -ne 0 ; then
-    AC_MSG_RESULT([not found])
-    AC_MSG_ERROR([Text::CSV Perl module is required to compile this package])
-  fi
-  AC_MSG_RESULT([found])
-fi
-
 SPICE_GLIB_REQUIRES=""
 SPICE_GTK_REQUIRES=""
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 7542fac..594c0de 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -26,14 +26,13 @@ GLIBGENS =					\
 	spice-widget-enums.h			\
 	$(NULL)
 
-CLEANFILES = $(GLIBGENS)
+CLEANFILES = $(GLIBGENS) $(KEYMAPS)
 BUILT_SOURCES = $(GLIBGENS) $(KEYMAPS)
 
 EXTRA_DIST =					\
-	$(KEYMAPS)				\
 	decode-glz-tmpl.c			\
-	keymap-gen.pl				\
-	keymaps.csv				\
+	$(KEYMAP_CSV) 				\
+	$(KEYMAP_GEN) 				\
 	map-file				\
 	spice-glib-sym-file			\
 	spice-gtk-sym-file			\
@@ -66,7 +65,8 @@ GTK_SYMBOLS_LDFLAGS = -export-symbols ${srcdir}/spice-gtk-sym-file
 GTK_SYMBOLS_FILE = spice-gtk-sym-file
 endif
 
-KEYMAP_GEN = $(srcdir)/keymap-gen.pl
+KEYMAP_GEN = keycodemapdb/tools/keymap-gen
+KEYMAP_CSV = keycodemapdb/data/keymaps.csv
 
 SPICE_COMMON_CPPFLAGS =						\
 	-DSPICE_COMPILATION					\
@@ -483,32 +483,28 @@ spice-widget-enums.h: spice-widget.h
 
 
 vncdisplaykeymap.c: $(KEYMAPS)
+$(KEYMAPS): $(srcdir)/$(KEYMAP_GEN) $(srcdir)/$(KEYMAP_CSV)
 
-$(KEYMAPS): $(KEYMAP_GEN) keymaps.csv
-
-# Note despite being autogenerated these are not part of CLEANFILES, they
-# are actually a part of EXTRA_DIST to avoid the need for perl(Text::CSV) by
-# end users
 vncdisplaykeymap_xorgevdev2xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgevdev xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_xorgevdev2xtkbd code-map $(srcdir)/$(KEYMAP_CSV) xorgevdev xtkbd > $@ || rm $@
 
 vncdisplaykeymap_xorgkbd2xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgkbd xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_xorgkbd2xtkbd code-map $(srcdir)/$(KEYMAP_CSV) xorgkbd xtkbd > $@ || rm $@
 
 vncdisplaykeymap_xorgxquartz2xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxquartz xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_xorgxquartz2xtkbd code-map $(srcdir)/$(KEYMAP_CSV) xorgxquartz xtkbd > $@ || rm $@
 
 vncdisplaykeymap_xorgxwin2xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxwin xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_xorgxwin2xtkbd code-map $(srcdir)/$(KEYMAP_CSV) xorgxwin xtkbd > $@ || rm $@
 
 vncdisplaykeymap_osx2xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv osx xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_osx2xtkbd code-map $(srcdir)/$(KEYMAP_CSV) osx xtkbd > $@ || rm $@
 
 vncdisplaykeymap_win322xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv win32 xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_win322xtkbd code-map $(srcdir)/$(KEYMAP_CSV) win32 xtkbd > $@ || rm $@
 
 vncdisplaykeymap_x112xtkbd.c:
-	$(AM_V_GEN)$(KEYMAP_GEN) $(srcdir)/keymaps.csv x11 xtkbd > $@ || rm $@
+	$(AM_V_GEN)$(PYTHON) $(srcdir)/$(KEYMAP_GEN) --lang glib2 --varname keymap_x112xtkbd code-map $(srcdir)/$(KEYMAP_CSV) x11 xtkbd > $@ || rm $@
 
 -include $(INTROSPECTION_MAKEFILE)
 
diff --git a/src/keycodemapdb b/src/keycodemapdb
new file mode 160000
index 0000000..b2976e7
--- /dev/null
+++ b/src/keycodemapdb
@@ -0,0 +1 @@
+Subproject commit b2976e7ed714400a3967ebb430bda45d1c253c20
diff --git a/src/keymap-gen.pl b/src/keymap-gen.pl
deleted file mode 100755
index 56953f8..0000000
--- a/src/keymap-gen.pl
+++ /dev/null
@@ -1,214 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use Text::CSV;
-
-my %names = (
-    linux => [],
-    osx => []
-);
-
-my %namecolumns = (
-    linux => 0,
-    osx => 2,
-    win32 => 10,
-    x11 => 14,
-    );
-
-# Base data sources:
-#
-#  linux:     Linux: linux/input.h                                  (master set)
-#    osx:      OS-X: Carbon/HIToolbox/Events.h                      (manually mapped)
-# atset1:  AT Set 1: linux/drivers/input/keyboard/atkbd.c           (atkbd_set2_keycode + atkbd_unxlate_table)
-# atset2:  AT Set 2: linux/drivers/input/keyboard/atkbd.c           (atkbd_set2_keycode)
-# atset3:  AT Set 3: linux/drivers/input/keyboard/atkbd.c           (atkbd_set3_keycode)
-#     xt:        XT: linux/drivers/input/keyboard/xt.c              (xtkbd_keycode)
-#  xtkbd: Linux RAW: linux/drivers/char/keyboard.c                  (x86_keycodes)
-#    usb:   USB HID: linux/drivers/hid/usbhid/usbkbd.c              (usb_kbd_keycode)
-#  win32:     Win32: mingw32/winuser.h                              (manually mapped)
-# xwinxt:   XWin XT: xorg-server/hw/xwin/{winkeybd.c,winkeynames.h} (xt + manually transcribed)
-# xkbdxt:   XKBD XT: xf86-input-keyboard/src/at_scancode.c
-#(xt + manually transcribed)
-#    x11: X11 keysyms: http://cgit.freedesktop.org/xorg/proto/x11proto/plain/keysymdef.h
-#
-# Derived data sources
-#
-#    xorgevdev: Xorg +  evdev: linux + an offset
-#      xorgkbd: Xorg +    kbd: xkbdxt + an offset
-#  xorgxquartz: Xorg +   OS-X: osx + an offset
-#     xorgxwin: Xorg + Cygwin: xwinxt + an offset
-#          rfb:   XT over RFB: xtkbd + special re-encoding of high bit
-
-my @basemaps = qw(linux osx atset1 atset2 atset3 xt xtkbd usb win32 xwinxt xkbdxt x11);
-my @derivedmaps = qw(xorgevdev xorgkbd xorgxquartz xorgxwin rfb);
-my @maps = (@basemaps, @derivedmaps);
-
-my %maps;
-
-foreach my $map (@maps) {
-    $maps{$map} = [ [], [] ];
-}
-my %mapcolumns = (
-    osx => 3,
-    atset1 => 4,
-    atset2 => 5,
-    atset3 => 6,
-    xt => 7,
-    xtkbd => 8,
-    usb => 9,
-    win32 => 11,
-    xwinxt => 12,
-    xkbdxt => 13,
-    x11 => 15
-    );
-
-sub help {
-    my $msg = shift;
-    print $msg;
-    print "\n";
-    print "Valid keymaps are:\n";
-    print "\n";
-    foreach my $name (sort { $a cmp $b } keys %maps) {
-	print "  $name\n";
-    }
-    print "\n";
-    exit (1);
-}
-
-if ($#ARGV != 2) {
-    help("syntax: $0 KEYMAPS SRCMAP DSTMAP\n");
-}
-
-my $keymaps = shift @ARGV;
-my $src = shift @ARGV;
-my $dst = shift @ARGV;
-
-help("$src is not a known keymap\n") unless exists $maps{$src};
-help("$dst is not a known keymap\n") unless exists $maps{$dst};
-
-
-open CSV, $keymaps
-    or die "cannot read $keymaps: $!";
-
-my $csv = Text::CSV->new();
-# Discard column headings
-$csv->getline(\*CSV);
-
-my $row;
-while ($row = $csv->getline(\*CSV)) {
-    my $linux = $row->[1];
-
-    $linux = hex($linux) if $linux =~ /0x/;
-
-    my $to = $maps{linux}->[0];
-    my $from = $maps{linux}->[1];
-    $to->[$linux] = $linux;
-    $from->[$linux] = $linux;
-
-    foreach my $name (keys %namecolumns) {
-	my $col = $namecolumns{$name};
-	my $val = $row->[$col];
-
-	$val = "" unless defined $val;
-
-	$names{$name}->[$linux] = $val;
-    }
-
-    foreach my $name (keys %mapcolumns) {
-	my $col = $mapcolumns{$name};
-	my $val = $row->[$col];
-
-	next unless defined $val && $val ne "";
-	$val = hex($val) if $val =~ /0x/;
-
-	$to = $maps{$name}->[0];
-        $from = $maps{$name}->[1];
-	$to->[$linux] = $val;
-	$from->[$val] = $linux;
-    }
-
-    # XXX there are some special cases in kbd to handle
-    # Xorg KBD driver is the Xorg KBD XT codes offset by +8
-    # The XKBD XT codes are the same as normal XT codes
-    # for values <= 83, and completely made up for extended
-    # scancodes :-(
-    ($to, $from) = @{$maps{xorgkbd}};
-    if (defined $maps{xkbdxt}->[0]->[$linux]) {
-	$to->[$linux] = $maps{xkbdxt}->[0]->[$linux] + 8;
-	$from->[$to->[$linux]] = $linux;
-    }
-
-    # Xorg evdev is simply Linux keycodes offset by +8
-    ($to, $from) = @{$maps{xorgevdev}};
-    $to->[$linux] = $linux + 8;
-    $from->[$to->[$linux]] = $linux;
-
-    # Xorg XQuartz is simply OS-X keycodes offset by +8
-    ($to, $from) = @{$maps{xorgxquartz}};
-    if (defined $maps{osx}->[0]->[$linux]) {
-	$to->[$linux] = $maps{osx}->[0]->[$linux] + 8;
-	$from->[$to->[$linux]] = $linux;
-    }
-
-    # RFB keycodes are XT kbd keycodes with a slightly
-    # different encoding of 0xe0 scan codes. RFB uses
-    # the high bit of the first byte, instead of the low
-    # bit of the second byte.
-    ($to, $from) = @{$maps{rfb}};
-    my $xtkbd = $maps{xtkbd}->[0]->[$linux];
-    if (defined $xtkbd) {
-	$to->[$linux] = $xtkbd ? (($xtkbd & 0x100)>>1) | ($xtkbd & 0x7f) : 0;
-	$from->[$to->[$linux]] = $linux;
-    }
-
-    # Xorg Cygwin is the Xorg Cygwin XT codes offset by +8
-    # The Cygwin XT codes are the same as normal XT codes
-    # for values <= 83, and completely made up for extended
-    # scancodes :-(
-    ($to, $from) = @{$maps{xorgxwin}};
-    if (defined $maps{xwinxt}->[0]->[$linux]) {
-	$to->[$linux] = $maps{xwinxt}->[0]->[$linux] + 8;
-	$from->[$to->[$linux]] = $linux;
-    }
-
-#    print $linux, "\n";
-}
-
-close CSV;
-
-my $srcmap = $maps{$src}->[1];
-my $dstmap = $maps{$dst}->[0];
-
-printf "static const guint16 keymap_%s2%s[] = {\n", $src, $dst;
-
-for (my $i = 0 ; $i <= $#{$srcmap} ; $i++) {
-    my $linux = $srcmap->[$i] || 0;
-    my $j = $dstmap->[$linux];
-    next unless $linux && $j;
-
-    my $srcname = $names{$src}->[$linux] if exists $names{$src};
-    my $dstname = $names{$dst}->[$linux] if exists $names{$dst};
-    my $vianame = $names{linux}->[$linux] unless $src eq "linux" || $dst eq "linux";
-
-    $srcname = "" unless $srcname;
-    $dstname = "" unless $dstname;
-    $vianame = "" unless $vianame;
-    $srcname = " ($srcname)" if $srcname;
-    $dstname = " ($dstname)" if $dstname;
-    $vianame = " ($vianame)" if $vianame;
-
-    my $comment;
-    if ($src ne "linux" && $dst ne "linux") {
-	$comment = sprintf "%d%s => %d%s via %d%s", $i, $srcname, $j, $dstname, $linux, $vianame;
-    } else {
-	$comment = sprintf "%d%s => %d%s", $i, $srcname, $j, $dstname;
-    }
-
-    my $data = sprintf "[0x%x] = 0x%x,", $i, $j;
-
-    printf "  %-20s /* %s */\n", $data, $comment;
-}
-
-print "};\n";
diff --git a/src/keymaps.csv b/src/keymaps.csv
deleted file mode 100644
index ef5c33e..0000000
--- a/src/keymaps.csv
+++ /dev/null
@@ -1,511 +0,0 @@
-"Linux Name","Linux Keycode","OS-X Name","OS-X Keycode","AT set1 keycode","AT set2 keycode","AT set3 keycode",XT,"XT KBD","USB Keycodes","Win32 Name","Win32 Keycode","Xwin XT","Xfree86 KBD XT","X11 keysym","X11 keycode"
-KEY_RESERVED,0,,,,,,,,,,,,,,
-KEY_ESC,1,Escape,0x35,1,118,8,1,1,41,VK_ESCAPE,0x1b,1,1,XK_Escape,0xff1b
-KEY_1,2,ANSI_1,0x12,2,22,22,2,2,30,VK_1,0x31,2,2,XK_1,0x0031
-KEY_1,2,ANSI_1,0x12,2,22,22,2,2,30,VK_1,0x31,2,2,XK_exclam,0x0021
-KEY_2,3,ANSI_2,0x13,3,30,30,3,3,31,VK_2,0x32,3,3,XK_2,0x0032
-KEY_2,3,ANSI_2,0x13,3,30,30,3,3,31,VK_2,0x32,3,3,XK_at,0x0040
-KEY_3,4,ANSI_3,0x14,4,38,38,4,4,32,VK_3,0x33,4,4,XK_3,0x0033
-KEY_3,4,ANSI_3,0x14,4,38,38,4,4,32,VK_3,0x33,4,4,XK_numbersign,0x0023
-KEY_4,5,ANSI_4,0x15,5,37,37,5,5,33,VK_4,0x34,5,5,XK_4,0x0034
-KEY_4,5,ANSI_4,0x15,5,37,37,5,5,33,VK_4,0x34,5,5,XK_dollar,0x0024
-KEY_5,6,ANSI_5,0x17,6,46,46,6,6,34,VK_5,0x35,6,6,XK_5,0x0035
-KEY_5,6,ANSI_5,0x17,6,46,46,6,6,34,VK_5,0x35,6,6,XK_percent,0x0025
-KEY_6,7,ANSI_6,0x16,7,54,54,7,7,35,VK_6,0x36,7,7,XK_6,0x0036
-KEY_6,7,ANSI_6,0x16,7,54,54,7,7,35,VK_6,0x36,7,7,XK_asciicircum,0x005e
-KEY_7,8,ANSI_7,0x1a,8,61,61,8,8,36,VK_7,0x37,8,8,XK_7,0x0037
-KEY_7,8,ANSI_7,0x1a,8,61,61,8,8,36,VK_7,0x37,8,8,XK_ampersand,0x0026
-KEY_8,9,ANSI_8,0x1c,9,62,62,9,9,37,VK_8,0x38,9,9,XK_8,0x0038
-KEY_8,9,ANSI_8,0x1c,9,62,62,9,9,37,VK_8,0x38,9,9,XK_asterisk,0x002a
-KEY_9,10,ANSI_9,0x19,10,70,70,10,10,38,VK_9,0x39,10,10,XK_9,0x0039
-KEY_9,10,ANSI_9,0x19,10,70,70,10,10,38,VK_9,0x39,10,10,XK_parenleft,0x0028
-KEY_0,11,ANSI_0,0x1d,11,69,69,11,11,39,VK_0,0x30,11,11,XK_0,0x0030
-KEY_0,11,ANSI_0,0x1d,11,69,69,11,11,39,VK_0,0x30,11,11,XK_parenright,0x0029
-KEY_MINUS,12,ANSI_Minus,0x1b,12,78,78,12,12,45,VK_OEM_MINUS,0xbd,12,12,XK_minus,0x002d
-KEY_MINUS,12,ANSI_Minus,0x1b,12,78,78,12,12,45,VK_OEM_MINUS,0xbd,12,12,XK_underscore,0x005f
-KEY_EQUAL,13,ANSI_Equal,0x18,13,85,85,13,13,46,VK_OEM_PLUS,0xbb,13,13,XK_equal,0x003d
-KEY_EQUAL,13,ANSI_Equal,0x18,13,85,85,13,13,46,VK_OEM_PLUS,0xbb,13,13,XK_plus,0x002b
-KEY_BACKSPACE,14,Delete,0x33,14,102,102,14,14,42,VK_BACK,0x08,14,14,XK_BackSpace,0xff08
-KEY_TAB,15,Tab,0x30,15,13,13,15,15,43,VK_TAB,0x09,15,15,XK_Tab,0xff09
-KEY_Q,16,ANSI_Q,0xc,16,21,21,16,16,20,VK_Q,0x51,16,16,XK_Q,0x0051
-KEY_Q,16,ANSI_Q,0xc,16,21,21,16,16,20,VK_Q,0x51,16,16,XK_q,0x0071
-KEY_W,17,ANSI_W,0xd,17,29,29,17,17,26,VK_W,0x57,17,17,XK_W,0x0057
-KEY_W,17,ANSI_W,0xd,17,29,29,17,17,26,VK_W,0x57,17,17,XK_w,0x0077
-KEY_E,18,ANSI_E,0xe,18,36,36,18,18,8,VK_E,0x45,18,18,XK_E,0x0045
-KEY_E,18,ANSI_E,0xe,18,36,36,18,18,8,VK_E,0x45,18,18,XK_e,0x0065
-KEY_R,19,ANSI_R,0xf,19,45,45,19,19,21,VK_R,0x52,19,19,XK_R,0x0052
-KEY_R,19,ANSI_R,0xf,19,45,45,19,19,21,VK_R,0x52,19,19,XK_r,0x0072
-KEY_T,20,ANSI_T,0x11,20,44,44,20,20,23,VK_T,0x54,20,20,XK_T,0x0054
-KEY_T,20,ANSI_T,0x11,20,44,44,20,20,23,VK_T,0x54,20,20,XK_t,0x0074
-KEY_Y,21,ANSI_Y,0x10,21,53,53,21,21,28,VK_Y,0x59,21,21,XK_Y,0x0059
-KEY_Y,21,ANSI_Y,0x10,21,53,53,21,21,28,VK_Y,0x59,21,21,XK_y,0x0079
-KEY_U,22,ANSI_U,0x20,22,60,60,22,22,24,VK_U,0x55,22,22,XK_U,0x0055
-KEY_U,22,ANSI_U,0x20,22,60,60,22,22,24,VK_U,0x55,22,22,XK_u,0x0075
-KEY_I,23,ANSI_I,0x22,23,67,67,23,23,12,VK_I,0x49,23,23,XK_I,0x0049
-KEY_I,23,ANSI_I,0x22,23,67,67,23,23,12,VK_I,0x49,23,23,XK_i,0x0069
-KEY_O,24,ANSI_O,0x1f,24,68,68,24,24,18,VK_O,0x4f,24,24,XK_O,0x004f
-KEY_O,24,ANSI_O,0x1f,24,68,68,24,24,18,VK_O,0x4f,24,24,XK_o,0x006f
-KEY_P,25,ANSI_P,0x23,25,77,77,25,25,19,VK_P,0x50,25,25,XK_P,0x0050
-KEY_P,25,ANSI_P,0x23,25,77,77,25,25,19,VK_P,0x50,25,25,XK_p,0x0070
-KEY_LEFTBRACE,26,ANSI_LeftBracket,0x21,26,84,84,26,26,47,VK_OEM_4,0xdb,26,26,XK_bracketleft,0x005b
-KEY_LEFTBRACE,26,ANSI_LeftBracket,0x21,26,84,84,26,26,47,VK_OEM_4,0xdb,26,26,XK_braceleft,0x007b
-KEY_RIGHTBRACE,27,ANSI_RightBracket,0x1e,27,91,91,27,27,48,VK_OEM_6,0xdd,27,27,XK_bracketright,0x005d
-KEY_RIGHTBRACE,27,ANSI_RightBracket,0x1e,27,91,91,27,27,48,VK_OEM_6,0xdd,27,27,XK_braceright,0x007d
-KEY_ENTER,28,Return,0x24,28,90,90,28,28,40,VK_RETURN,0x0d,28,28,XK_Return,0xff0d
-KEY_LEFTCTRL,29,Control,0x3b,29,20,17,29,29,224,VK_LCONTROL,0xa2,29,29,XK_Control_L,0xffe3
-KEY_LEFTCTRL,29,Control,0x3b,29,20,17,29,29,224,VK_CONTROL,0x11,29,29,XK_Control_L,0xffe3
-KEY_A,30,ANSI_A,0x0,30,28,28,30,30,4,VK_A,0x41,30,30,XK_A,0x0041
-KEY_A,30,ANSI_A,0x0,30,28,28,30,30,4,VK_A,0x41,30,30,XK_a,0x0061
-KEY_S,31,ANSI_S,0x1,31,27,27,31,31,22,VK_S,0x53,31,31,XK_S,0x0053
-KEY_S,31,ANSI_S,0x1,31,27,27,31,31,22,VK_S,0x53,31,31,XK_s,0x0073
-KEY_D,32,ANSI_D,0x2,32,35,35,32,32,7,VK_D,0x44,32,32,XK_D,0x0044
-KEY_D,32,ANSI_D,0x2,32,35,35,32,32,7,VK_D,0x44,32,32,XK_d,0x0064
-KEY_F,33,ANSI_F,0x3,33,43,43,33,33,9,VK_F,0x46,33,33,XK_F,0x0046
-KEY_F,33,ANSI_F,0x3,33,43,43,33,33,9,VK_F,0x46,33,33,XK_f,0x0066
-KEY_G,34,ANSI_G,0x5,34,52,52,34,34,10,VK_G,0x47,34,34,XK_G,0x0047
-KEY_G,34,ANSI_G,0x5,34,52,52,34,34,10,VK_G,0x47,34,34,XK_g,0x0067
-KEY_H,35,ANSI_H,0x4,35,51,51,35,35,11,VK_H,0x48,35,35,XK_H,0x0048
-KEY_H,35,ANSI_H,0x4,35,51,51,35,35,11,VK_H,0x48,35,35,XK_h,0x0068
-KEY_J,36,ANSI_J,0x26,36,59,59,36,36,13,VK_J,0x4a,36,36,XK_J,0x004a
-KEY_J,36,ANSI_J,0x26,36,59,59,36,36,13,VK_J,0x4a,36,36,XK_j,0x006a
-KEY_K,37,ANSI_K,0x28,37,66,66,37,37,14,VK_K,0x4b,37,37,XK_K,0x004b
-KEY_K,37,ANSI_K,0x28,37,66,66,37,37,14,VK_K,0x4b,37,37,XK_k,0x006b
-KEY_L,38,ANSI_L,0x25,38,75,75,38,38,15,VK_L,0x4c,38,38,XK_L,0x004c
-KEY_L,38,ANSI_L,0x25,38,75,75,38,38,15,VK_L,0x4c,38,38,XK_l,0x006c
-KEY_SEMICOLON,39,ANSI_Semicolon,0x29,39,76,76,39,39,51,VK_OEM_1,0xba,39,39,XK_semicolon,0x003b
-KEY_SEMICOLON,39,ANSI_Semicolon,0x29,39,76,76,39,39,51,VK_OEM_1,0xba,39,39,XK_colon,0x003a
-KEY_APOSTROPHE,40,ANSI_Quote,0x27,40,82,82,40,40,52,VK_OEM_7,0xde,40,40,XK_apostrophe,0x0027
-KEY_APOSTROPHE,40,ANSI_Quote,0x27,40,82,82,40,40,52,VK_OEM_7,0xde,40,40,XK_quotedbl,0x0022
-KEY_GRAVE,41,ANSI_Grave,0x32,41,14,14,41,41,53,VK_OEM_3,0xc0,41,41,XK_grave,0x0060
-KEY_GRAVE,41,ANSI_Grave,0x32,41,14,14,41,41,53,VK_OEM_3,0xc0,41,41,XK_asciitilde,0x007e
-KEY_SHIFT,42,Shift,0x38,42,18,18,42,42,225,VK_SHIFT,0x10,42,42,XK_Shift_L,0xffe1
-KEY_LEFTSHIFT,42,Shift,0x38,42,18,18,42,42,225,VK_LSHIFT,0xa0,42,42,XK_Shift_L,0xffe1
-KEY_BACKSLASH,43,ANSI_Backslash,0x2a,43,93,93,43,43,50,VK_OEM_5,0xdc,43,43,XK_backslash,0x005c
-KEY_BACKSLASH,43,ANSI_Backslash,0x2a,43,93,93,43,43,50,VK_OEM_5,0xdc,43,43,XK_bar,0x007c
-KEY_Z,44,ANSI_Z,0x6,44,26,26,44,44,29,VK_Z,0x5a,44,44,XK_Z,0x005a
-KEY_Z,44,ANSI_Z,0x6,44,26,26,44,44,29,VK_Z,0x5a,44,44,XK_z,0x007a
-KEY_X,45,ANSI_X,0x7,45,34,34,45,45,27,VK_X,0x58,45,45,XK_X,0x0058
-KEY_X,45,ANSI_X,0x7,45,34,34,45,45,27,VK_X,0x58,45,45,XK_x,0x0078
-KEY_C,46,ANSI_C,0x8,46,33,33,46,46,6,VK_C,0x43,46,46,XK_C,0x0043
-KEY_C,46,ANSI_C,0x8,46,33,33,46,46,6,VK_C,0x43,46,46,XK_c,0x0063
-KEY_V,47,ANSI_V,0x9,47,42,42,47,47,25,VK_V,0x56,47,47,XK_V,0x0056
-KEY_V,47,ANSI_V,0x9,47,42,42,47,47,25,VK_V,0x56,47,47,XK_v,0x0076
-KEY_B,48,ANSI_B,0xb,48,50,50,48,48,5,VK_B,0x42,48,48,XK_B,0x0042
-KEY_B,48,ANSI_B,0xb,48,50,50,48,48,5,VK_B,0x42,48,48,XK_b,0x0062
-KEY_N,49,ANSI_N,0x2d,49,49,49,49,49,17,VK_N,0x4e,49,49,XK_N,0x004e
-KEY_N,49,ANSI_N,0x2d,49,49,49,49,49,17,VK_N,0x4e,49,49,XK_n,0x006e
-KEY_M,50,ANSI_M,0x2e,50,58,58,50,50,16,VK_M,0x4d,50,50,XK_M,0x004d
-KEY_M,50,ANSI_M,0x2e,50,58,58,50,50,16,VK_M,0x4d,50,50,XK_m,0x006d
-KEY_COMMA,51,ANSI_Comma,0x2b,51,65,65,51,51,54,VK_OEM_COMMA,0xbc,51,51,XK_comma,0x002c
-KEY_COMMA,51,ANSI_Comma,0x2b,51,65,65,51,51,54,VK_OEM_COMMA,0xbc,51,51,XK_less,0x003c
-KEY_DOT,52,ANSI_Period,0x2f,52,73,73,52,52,55,VK_OEM_PERIOD,0xbe,52,52,XK_period,0x002e
-KEY_DOT,52,ANSI_Period,0x2f,52,73,73,52,52,55,VK_OEM_PERIOD,0xbe,52,52,XK_greater,0x003e
-KEY_SLASH,53,ANSI_Slash,0x2c,53,74,74,53,53,56,VK_OEM_2,0xbf,53,53,XK_slash,0x002f
-KEY_SLASH,53,ANSI_Slash,0x2c,53,74,74,53,53,56,VK_OEM_2,0xbf,53,53,XK_question,0x003f
-KEY_RIGHTSHIFT,54,RightShift,0x3c,54,89,89,54,54,229,VK_RSHIFT,0xa1,54,54,XK_Shift_R,0xffe2
-KEY_KPASTERISK,55,ANSI_KeypadMultiply,0x43,55,124,126,55,55,85,VK_MULTIPLY,0x6a,55,55,XK_multiply,0x00d7
-KEY_LEFTALT,56,Option,0x3a,56,17,25,56,56,226,VK_LMENU,0xa4,56,56,XK_Alt_L,0xffe9
-KEY_LEFTALT,56,Option,0x3a,56,17,25,56,56,226,VK_MENU,0x12,56,56,XK_Alt_L,0xffe9
-KEY_SPACE,57,Space,0x31,57,41,41,57,57,44,VK_SPACE,0x20,57,57,XK_space,0x0020
-KEY_CAPSLOCK,58,CapsLock,0x39,58,88,20,58,58,57,VK_CAPITAL,0x14,58,58,XK_Caps_Lock,0xffe5
-KEY_F1,59,F1,0x7a,59,5,7,59,59,58,VK_F1,0x70,59,59,XK_F1,0xffbe
-KEY_F2,60,F2,0x78,60,6,15,60,60,59,VK_F2,0x71,60,60,XK_F2,0xffbf
-KEY_F3,61,F3,0x63,61,4,23,61,61,60,VK_F3,0x72,61,61,XK_F3,0xffc0
-KEY_F4,62,F4,0x76,62,12,31,62,62,61,VK_F4,0x73,62,62,XK_F4,0xffc1
-KEY_F5,63,F5,0x60,63,3,39,63,63,62,VK_F5,0x74,63,63,XK_F5,0xffc2
-KEY_F6,64,F6,0x61,64,11,47,64,64,63,VK_F6,0x75,64,64,XK_F6,0xffc3
-KEY_F7,65,F7,0x62,65,259,55,65,65,64,VK_F7,0x76,65,65,XK_F7,0xffc4
-KEY_F8,66,F8,0x64,66,10,63,66,66,65,VK_F8,0x77,66,66,XK_F8,0xffc5
-KEY_F9,67,F9,0x65,67,1,71,67,67,66,VK_F9,0x78,67,67,XK_F9,0xffc6
-KEY_F10,68,F10,0x6d,68,9,79,68,68,67,VK_F10,0x79,68,68,XK_F10,0xffc7
-KEY_NUMLOCK,69,,,69,119,118,69,69,83,VK_NUMLOCK,0x90,69,69,XK_Num_Lock,0xff7f
-KEY_SCROLLLOCK,70,,,70,126,95,70,70,71,VK_SCROLL,0x91,70,70,XK_Scroll_Lock,0xff14
-KEY_KP7,71,ANSI_Keypad7,0x59,71,108,108,71,71,95,VK_NUMPAD7,0x67,71,71,XK_KP_7,0xffb7
-KEY_KP8,72,ANSI_Keypad8,0x5b,72,117,117,72,72,96,VK_NUMPAD8,0x68,72,72,XK_KP_8,0xffb8
-KEY_KP9,73,ANSI_Keypad9,0x5c,73,125,125,73,73,97,VK_NUMPAD9,0x69,73,73,XK_KP_9,0xffb9
-KEY_KPMINUS,74,ANSI_KeypadMinus,0x4e,74,123,132,74,74,86,VK_SUBTRACT,0x6d,74,74,XK_KP_Subtract,0xffad
-KEY_KP4,75,ANSI_Keypad4,0x56,75,107,107,75,75,92,VK_NUMPAD4,0x64,75,75,XK_KP_4,0xffb4
-KEY_KP5,76,ANSI_Keypad5,0x57,76,115,115,76,76,93,VK_NUMPAD5,0x65,76,76,XK_KP_5,0xffb5
-KEY_KP6,77,ANSI_Keypad6,0x58,77,116,116,77,77,94,VK_NUMPAD6,0x66,77,77,XK_KP_6,0xffb6
-KEY_KPPLUS,78,ANSI_KeypadPlus,0x45,78,121,124,78,78,87,VK_ADD,0x6b,78,78,XK_KP_Add,0xffab
-KEY_KP1,79,ANSI_Keypad1,0x53,79,105,105,79,79,89,VK_NUMPAD1,0x61,79,79,XK_KP_1,0xffb1
-KEY_KP2,80,ANSI_Keypad2,0x54,80,114,114,80,80,90,VK_NUMPAD2,0x62,80,80,XK_KP_2,0xffb2
-KEY_KP3,81,ANSI_Keypad3,0x55,81,122,122,81,81,91,VK_NUMPAD3,0x63,81,81,XK_KP_3,0xffb3
-KEY_KP0,82,ANSI_Keypad0,0x52,82,112,112,82,82,98,VK_NUMPAD0,0x60,82,82,XK_KP_0,0xffb0
-KEY_KPDOT,83,ANSI_KeypadDecimal,0x41,83,113,113,83,83,99,VK_DECIMAL,0x6e,83,83,XK_KP_Decimal,0xffae
-,84,,,,,,,84,,,,,,,
-KEY_ZENKAKUHANKAKU,85,,,118,95,,,118,148,,,,,,
-KEY_102ND,86,,,86,97,19,,86,100,VK_OEM_102,0xe1,86,86,,
-KEY_F11,87,F11,0x67,87,120,86,101,87,68,VK_F11,0x7a,87,87,XK_F11,0xffc8
-KEY_F12,88,F12,0x6f,88,7,94,102,88,69,VK_F12,0x7b,88,88,XK_F12,0xffc9
-KEY_RO,89,,,115,81,,,115,135,,,,,,
-KEY_KATAKANA,90,JIS_Kana????,0x68,120,99,,,120,146,VK_KANA,0x15,,,,
-KEY_HIRAGANA,91,,,119,98,,,119,147,,,,,,
-KEY_HENKAN,92,,,121,100,134,,121,138,,,,,,
-KEY_KATAKANAHIRAGANA,93,,,112,19,135,,112,136,,,0xc8,0xc8,,
-KEY_MUHENKAN,94,,,123,103,133,,123,139,,,,,,
-KEY_KPJPCOMMA,95,JIS_KeypadComma,0x5f,92,39,,,92,140,,,,,XK_KP_Separator,0xffac
-KEY_KPENTER,96,ANSI_KeypadEnter,0x4c,,158,121,,284,88,,,0x64,0x64,XK_KP_Enter,0xff8d
-KEY_RIGHTCTRL,97,RightControl,0x3e,,,88,,285,228,VK_RCONTROL,0xa3,0x65,0x65,XK_Control_R,0xffe4
-KEY_KPSLASH,98,ANSI_KeypadDivide,0x4b,,181,119,,309,84,VK_DIVIDE,0x6f,0x68,0x68,XK_KP_Divide,0xffaf
-KEY_SYSRQ,99,,,84,260,87,,84,70,"VK_SNAPSHOT ???",0x2c,0x67,0x67,XK_Sys_Req,0xff15
-KEY_RIGHTALT,100,RightOption,0x3d,,,57,,312,230,VK_RMENU,0xa5,0x69,0x69,XK_Alt_R,0xffea
-KEY_LINEFEED,101,,,,,,,91,,,,,,,
-KEY_HOME,102,Home,0x73,,224,110,,327,74,VK_HOME,0x24,0x59,0x59,XK_Home,0xff50
-KEY_UP,103,UpArrow,0x7e,,236,99,109,328,82,VK_UP,0x26,0x5a,0x5a,XK_Up,0xff52
-KEY_PAGEUP,104,PageUp,0x74,,201,111,,329,75,VK_PRIOR,0x21,0x5b,0x5b,XK_Page_Up,0xff55
-KEY_LEFT,105,LeftArrow,0x7b,,203,97,111,331,80,VK_LEFT,0x25,0x5c,0x5c,XK_Left,0xff51
-KEY_RIGHT,106,RightArrow,0x7c,,205,106,112,333,79,VK_RIGHT,0x27,0x5e,0x5e,XK_Right,0xff53
-KEY_END,107,End,0x77,,225,101,,335,77,VK_END,0x23,0x5f,0x5f,XK_End,0xff57
-KEY_DOWN,108,DownArrow,0x7d,,254,96,110,336,81,VK_DOWN,0x28,0x60,0x60,XK_Down,0xff54
-KEY_PAGEDOWN,109,PageDown,0x79,,243,109,,337,78,VK_NEXT,0x22,0x61,0x61,XK_Page_Down,0xff56
-KEY_INSERT,110,,,,210,103,107,338,73,VK_INSERT,0x2d,0x62,0x62,XK_Insert,0xff63
-KEY_DELETE,111,ForwardDelete,0x75,,244,100,108,339,76,VK_DELETE,0x2e,0x63,0x63,XK_Delete,0xffff
-KEY_MACRO,112,,,,239,142,,367,,,,,,,
-KEY_MUTE,113,Mute,0x4a,,251,156,,288,239,VK_VOLUME_MUTE,0xad,,,,
-KEY_VOLUMEDOWN,114,VolumeDown,0x49,,,157,,302,238,VK_VOLUME_DOWN,0xae,,,,
-KEY_VOLUMEUP,115,VolumeUp,0x48,,233,149,,304,237,VK_VOLUME_UP,0xaf,,,,
-KEY_POWER,116,,,,,,,350,102,,,,,,
-KEY_KPEQUAL,117,ANSI_KeypadEquals,0x51,89,15,,,89,103,,,0x76,0x76,XK_KP_Equal,0xffbd
-KEY_KPPLUSMINUS,118,,,,206,,,334,,,,,,,
-KEY_PAUSE,119,,,,198,98,,326,72,VK_PAUSE,0x013,0x66,0x66,XK_Pause,0xff13
-KEY_SCALE,120,,,,,,,267,,,,,,,
-KEY_KPCOMMA,121,ANSI_KeypadClear????,0x47,126,109,,,126,133,VK_SEPARATOR??,0x6c,,,,
-KEY_HANGEUL,122,,,,,,,,144,VK_HANGEUL,0x15,,,,
-KEY_HANJA,123,,,,,,,269,145,VK_HANJA,0x19,,,,
-KEY_YEN,124,JIS_Yen,0x5d,125,106,,,125,137,,,0x7d,0x7d,,
-KEY_LEFTMETA,125,Command,0x37,,,139,,347,227,VK_LWIN,0x5b,0x6b,0x6b,XK_Meta_L,0xffe7
-KEY_RIGHTMETA,126,,,,,140,,348,231,VK_RWIN,0x5c,0x6c,0x6c,XK_Meta_R,0xffe8
-KEY_COMPOSE,127,Function,0x3f,,,141,,349,101,VK_APPS,0x5d,0x6d,0x6d,,
-KEY_STOP,128,,,,,10,,360,243,VK_BROWSER_STOP,0xa9,,,,
-KEY_AGAIN,129,,,,,11,,261,121,,,,,,
-KEY_PROPS,130,,,,,12,,262,118,,,,,,
-KEY_UNDO,131,,,,,16,,263,122,,,,,,
-KEY_FRONT,132,,,,,,,268,119,,,,,,
-KEY_COPY,133,,,,,24,,376,124,,,,,,
-KEY_OPEN,134,,,,,32,,100,116,,,,,,
-KEY_PASTE,135,,,,,40,,101,125,,,,,,
-KEY_FIND,136,,,,,48,,321,244,,,,,,
-KEY_CUT,137,,,,,56,,316,123,,,,,,
-KEY_HELP,138,,,,,9,,373,117,VK_HELP,0x2f,,,XK_Help,0xff6a
-KEY_MENU,139,,,,,145,,286,,,,,,,
-KEY_CALC,140,,,,174,163,,289,251,,,,,,
-KEY_SETUP,141,,,,,,,102,,,,,,,
-KEY_SLEEP,142,,,,,,,351,248,VK_SLEEP,0x5f,,,,
-KEY_WAKEUP,143,,,,,,,355,,,,,,,
-KEY_FILE,144,,,,,,,103,,,,,,,
-KEY_SENDFILE,145,,,,,,,104,,,,,,,
-KEY_DELETEFILE,146,,,,,,,105,,,,,,,
-KEY_XFER,147,,,,,162,,275,,,,,,,
-KEY_PROG1,148,,,,,160,,287,,,,,,,
-KEY_PROG2,149,,,,,161,,279,,,,,,,
-KEY_WWW,150,,,,,,,258,240,,,,,,
-KEY_MSDOS,151,,,,,,,106,,,,,,,
-KEY_SCREENLOCK,152,,,,,150,,274,249,,,,,,
-KEY_DIRECTION,153,,,,,,,107,,,,,,,
-KEY_CYCLEWINDOWS,154,,,,,155,,294,,,,,,,
-KEY_MAIL,155,,,,,,,364,,,,,,,
-KEY_BOOKMARKS,156,,,,,,,358,,,,,,,
-KEY_COMPUTER,157,,,,,,,363,,,,,,,
-KEY_BACK,158,,,,,,,362,241,VK_BROWSER_BACK,0xa6,,,,
-KEY_FORWARD,159,,,,,,,361,242,VK_BROWSER_FORWARD,0xa7,,,,
-KEY_CLOSECD,160,,,,,154,,291,,,,,,,
-KEY_EJECTCD,161,,,,,,,108,236,,,,,,
-KEY_EJECTCLOSECD,162,,,,,,,381,,,,,,,
-KEY_NEXTSONG,163,,,,241,147,,281,235,VK_MEDIA_NEXT_TRACK,0xb0,,,,
-KEY_PLAYPAUSE,164,,,,173,,,290,232,VK_MEDIA_PLAY_PAUSE,0xb3,,,,
-KEY_PREVIOUSSONG,165,,,,250,148,,272,234,VK_MEDIA_PREV_TRACK,0xb1,,,,
-KEY_STOPCD,166,,,,164,152,,292,233,VK_MEDIA_STOP,0xb2,,,,
-KEY_RECORD,167,,,,,158,,305,,,,,,,
-KEY_REWIND,168,,,,,159,,280,,,,,,,
-KEY_PHONE,169,,,,,,,99,,,,,,,
-KEY_ISO,170,ISO_Section,0xa,,,,,112,,,,,,,
-KEY_CONFIG,171,,,,,,,257,,,,,,,
-KEY_HOMEPAGE,172,,,,178,151,,306,,VK_BROWSER_HOME,0xac,,,,
-KEY_REFRESH,173,,,,,,,359,250,VK_BROWSER_REFRESH,0xa8,,,,
-KEY_EXIT,174,,,,,,,113,,,,,,,
-KEY_MOVE,175,,,,,,,114,,,,,,,
-KEY_EDIT,176,,,,,,,264,247,,,,,,
-KEY_SCROLLUP,177,,,,,,,117,245,,,,,,
-KEY_SCROLLDOWN,178,,,,,,,271,246,,,,,,
-KEY_KPLEFTPAREN,179,,,,,,,374,182,,,,,,
-KEY_KPRIGHTPAREN,180,,,,,,,379,183,,,,,,
-KEY_NEW,181,,,,,,,265,,,,,,,
-KEY_REDO,182,,,,,,,266,,,,,,,
-KEY_F13,183,F13,0x69,93,47,127,,93,104,VK_F13,0x7c,0x6e,0x6e,,
-KEY_F14,184,F14,0x6b,94,55,128,,94,105,VK_F14,0x7d,0x6f,0x6f,,
-KEY_F15,185,F15,0x71,95,63,129,,95,106,VK_F15,0x7e,0x70,0x70,,
-KEY_F16,186,F16,0x6a,,,130,,85,107,VK_F16,0x7f,0x71,0x71,,
-KEY_F17,187,F17,0x40,,,131,,259,108,VK_F17,0x80,0x72,0x72,,
-KEY_F18,188,F18,0x4f,,,,,375,109,VK_F18,0x81,,,,
-KEY_F19,189,F19,0x50,,,,,260,110,VK_F19,0x82,,,,
-KEY_F20,190,F20,0x5a,,,,,90,111,VK_F20,0x83,,,,
-KEY_F21,191,,,,,,,116,112,VK_F21,0x84,,,,
-KEY_F22,192,,,,,,,377,113,VK_F22,0x85,,,,
-KEY_F23,193,,,,,,,109,114,VK_F23,0x86,,,,
-KEY_F24,194,,,,,,,111,115,VK_F24,0x87,,,,
-,195,,,,,,,277,,,,,,,
-,196,,,,,,,278,,,,,,,
-,197,,,,,,,282,,,,,,,
-,198,,,,,,,283,,,,,,,
-,199,,,,,,,295,,,,,,,
-KEY_PLAYCD,200,,,,,,,296,,,,,,,
-KEY_PAUSECD,201,,,,,,,297,,,,,,,
-KEY_PROG3,202,,,,,,,299,,,,,,,
-KEY_PROG4,203,,,,,,,300,,,,,,,
-KEY_DASHBOARD,204,,,,,,,301,,,,,,,
-KEY_SUSPEND,205,,,,,,,293,,,,,,,
-KEY_CLOSE,206,,,,,,,303,,,,,,,
-KEY_PLAY,207,,,,,,,307,,VK_PLAY,0xfa,,,,
-KEY_FASTFORWARD,208,,,,,,,308,,,,,,,
-KEY_BASSBOOST,209,,,,,,,310,,,,,,,
-KEY_PRINT,210,,,,,,,313,,VK_PRINT,0x2a,,,,
-KEY_HP,211,,,,,,,314,,,,,,,
-KEY_CAMERA,212,,,,,,,315,,,,,,,
-KEY_SOUND,213,,,,,,,317,,,,,,,
-KEY_QUESTION,214,,,,,,,318,,,,,,,
-KEY_EMAIL,215,,,,,,,319,,VK_LAUNCH_MAIL,0xb4,,,,
-KEY_CHAT,216,,,,,,,320,,,,,,,
-KEY_SEARCH,217,,,,,,,357,,VK_BROWSER_SEARCH,0xaa,,,,
-KEY_CONNECT,218,,,,,,,322,,,,,,,
-KEY_FINANCE,219,,,,,,,323,,,,,,,
-KEY_SPORT,220,,,,,,,324,,,,,,,
-KEY_SHOP,221,,,,,,,325,,,,,,,
-KEY_ALTERASE,222,,,,,,,276,,,,,,,
-KEY_CANCEL,223,,,,,,,330,,,,,,,
-KEY_BRIGHTNESSDOWN,224,,,,,,,332,,,,,,,
-KEY_BRIGHTNESSUP,225,,,,,,,340,,,,,,,
-KEY_MEDIA,226,,,,,,,365,,,,,,,
-KEY_SWITCHVIDEOMODE,227,,,,,,,342,,,,,,,
-KEY_KBDILLUMTOGGLE,228,,,,,,,343,,,,,,,
-KEY_KBDILLUMDOWN,229,,,,,,,344,,,,,,,
-KEY_KBDILLUMUP,230,,,,,,,345,,,,,,,
-KEY_SEND,231,,,,,,,346,,,,,,,
-KEY_REPLY,232,,,,,,,356,,,,,,,
-KEY_FORWARDMAIL,233,,,,,,,270,,,,,,,
-KEY_SAVE,234,,,,,,,341,,,,,,,
-KEY_DOCUMENTS,235,,,,,,,368,,,,,,,
-KEY_BATTERY,236,,,,,,,369,,,,,,,
-KEY_BLUETOOTH,237,,,,,,,370,,,,,,,
-KEY_WLAN,238,,,,,,,371,,,,,,,
-KEY_UWB,239,,,,,,,372,,,,,,,
-KEY_UNKNOWN,240,,,,,,,,,,,,,,
-KEY_VIDEO_NEXT,241,,,,,,,,,,,,,,
-KEY_VIDEO_PREV,242,,,,,,,,,,,,,,
-KEY_BRIGHTNESS_CYCLE,243,,,,,,,,,,,,,,
-KEY_BRIGHTNESS_ZERO,244,,,,,,,,,,,,,,
-KEY_DISPLAY_OFF,245,,,,,,,,,,,,,,
-KEY_WIMAX,246,,,,,,,,,,,,,,
-,247,,,,,,,,,,,,,,
-,248,,,,,,,,,,,,,,
-,249,,,,,,,,,,,,,,
-,250,,,,,,,,,,,,,,
-,251,,,,,,,,,,,,,,
-,252,,,,,,,,,,,,,,
-,253,,,,,,,,,,,,,,
-,254,,,,,,,,,,,,,,
-,255,,,,182,,,,,,,,,,
-BTN_MISC,0x100,,,,,,,,,,,,,,
-BTN_0,0x100,,,,,,,,,VK_LBUTTON,0x01,,,,
-BTN_1,0x101,,,,,,,,,VK_RBUTTON,0x02,,,,
-BTN_2,0x102,,,,,,,,,VK_MBUTTON,0x04,,,,
-BTN_3,0x103,,,,,,,,,VK_XBUTTON1,0x05,,,,
-BTN_4,0x104,,,,,,,,,VK_XBUTTON2,0x06,,,,
-BTN_5,0x105,,,,,,,,,,,,,,
-BTN_6,0x106,,,,,,,,,,,,,,
-BTN_7,0x107,,,,,,,,,,,,,,
-BTN_8,0x108,,,,,,,,,,,,,,
-BTN_9,0x109,,,,,,,,,,,,,,
-BTN_MOUSE,0x110,,,,,,,,,,,,,,
-BTN_LEFT,0x110,,,,,,,,,,,,,,
-BTN_RIGHT,0x111,,,,,,,,,,,,,,
-BTN_MIDDLE,0x112,,,,,,,,,,,,,,
-BTN_SIDE,0x113,,,,,,,,,,,,,,
-BTN_EXTRA,0x114,,,,,,,,,,,,,,
-BTN_FORWARD,0x115,,,,,,,,,,,,,,
-BTN_BACK,0x116,,,,,,,,,,,,,,
-BTN_TASK,0x117,,,,,,,,,,,,,,
-BTN_JOYSTICK,0x120,,,,,,,,,,,,,,
-BTN_TRIGGER,0x120,,,,,,,,,,,,,,
-BTN_THUMB,0x121,,,,,,,,,,,,,,
-BTN_THUMB2,0x122,,,,,,,,,,,,,,
-BTN_TOP,0x123,,,,,,,,,,,,,,
-BTN_TOP2,0x124,,,,,,,,,,,,,,
-BTN_PINKIE,0x125,,,,,,,,,,,,,,
-BTN_BASE,0x126,,,,,,,,,,,,,,
-BTN_BASE2,0x127,,,,,,,,,,,,,,
-BTN_BASE3,0x128,,,,,,,,,,,,,,
-BTN_BASE4,0x129,,,,,,,,,,,,,,
-BTN_BASE5,0x12a,,,,,,,,,,,,,,
-BTN_BASE6,0x12b,,,,,,,,,,,,,,
-BTN_DEAD,0x12f,,,,,,,,,,,,,,
-BTN_GAMEPAD,0x130,,,,,,,,,,,,,,
-BTN_A,0x130,,,,,,,,,,,,,,
-BTN_B,0x131,,,,,,,,,,,,,,
-BTN_C,0x132,,,,,,,,,,,,,,
-BTN_X,0x133,,,,,,,,,,,,,,
-BTN_Y,0x134,,,,,,,,,,,,,,
-BTN_Z,0x135,,,,,,,,,,,,,,
-BTN_TL,0x136,,,,,,,,,,,,,,
-BTN_TR,0x137,,,,,,,,,,,,,,
-BTN_TL2,0x138,,,,,,,,,,,,,,
-BTN_TR2,0x139,,,,,,,,,,,,,,
-BTN_SELECT,0x13a,,,,,,,,,,,,,,
-BTN_START,0x13b,,,,,,,,,,,,,,
-BTN_MODE,0x13c,,,,,,,,,,,,,,
-BTN_THUMBL,0x13d,,,,,,,,,,,,,,
-BTN_THUMBR,0x13e,,,,,,,,,,,,,,
-BTN_DIGI,0x140,,,,,,,,,,,,,,
-BTN_TOOL_PEN,0x140,,,,,,,,,,,,,,
-BTN_TOOL_RUBBER,0x141,,,,,,,,,,,,,,
-BTN_TOOL_BRUSH,0x142,,,,,,,,,,,,,,
-BTN_TOOL_PENCIL,0x143,,,,,,,,,,,,,,
-BTN_TOOL_AIRBRUSH,0x144,,,,,,,,,,,,,,
-BTN_TOOL_FINGER,0x145,,,,,,,,,,,,,,
-BTN_TOOL_MOUSE,0x146,,,,,,,,,,,,,,
-BTN_TOOL_LENS,0x147,,,,,,,,,,,,,,
-BTN_TOUCH,0x14a,,,,,,,,,,,,,,
-BTN_STYLUS,0x14b,,,,,,,,,,,,,,
-BTN_STYLUS2,0x14c,,,,,,,,,,,,,,
-BTN_TOOL_DOUBLETAP,0x14d,,,,,,,,,,,,,,
-BTN_TOOL_TRIPLETAP,0x14e,,,,,,,,,,,,,,
-BTN_TOOL_QUADTAP,0x14f,,,,,,,,,,,,,,
-BTN_WHEEL,0x150,,,,,,,,,,,,,,
-BTN_GEAR_DOWN,0x150,,,,,,,,,,,,,,
-BTN_GEAR_UP,0x151,,,,,,,,,,,,,,
-KEY_OK,0x160,,,,,,,,,,,,,,
-KEY_SELECT,0x161,,,,,,,,,VK_SELECT,0x29,,,XK_Select,0xff60
-KEY_GOTO,0x162,,,,,,,,,,,,,,
-KEY_CLEAR,0x163,,,,,,,,,,,,,,
-KEY_POWER2,0x164,,,,,,,,,,,,,,
-KEY_OPTION,0x165,,,,,,,,,,,,,,
-KEY_INFO,0x166,,,,,,,,,,,,,,
-KEY_TIME,0x167,,,,,,,,,,,,,,
-KEY_VENDOR,0x168,,,,,,,,,,,,,,
-KEY_ARCHIVE,0x169,,,,,,,,,,,,,,
-KEY_PROGRAM,0x16a,,,,,,,,,,,,,,
-KEY_CHANNEL,0x16b,,,,,,,,,,,,,,
-KEY_FAVORITES,0x16c,,,,,,,,,VK_BROWSER_FAVOURITES,0xab,,,,
-KEY_EPG,0x16d,,,,,,,,,,,,,,
-KEY_PVR,0x16e,,,,,,,,,,,,,,
-KEY_MHP,0x16f,,,,,,,,,,,,,,
-KEY_LANGUAGE,0x170,,,,,,,,,,,,,,
-KEY_TITLE,0x171,,,,,,,,,,,,,,
-KEY_SUBTITLE,0x172,,,,,,,,,,,,,,
-KEY_ANGLE,0x173,,,,,,,,,,,,,,
-KEY_ZOOM,0x174,,,,,,,,,VK_ZOOM,0xfb,,,,
-KEY_MODE,0x175,,,,,,,,,,,,,,
-KEY_KEYBOARD,0x176,,,,,,,,,,,,,,
-KEY_SCREEN,0x177,,,,,,,,,,,,,,
-KEY_PC,0x178,,,,,,,,,,,,,,
-KEY_TV,0x179,,,,,,,,,,,,,,
-KEY_TV2,0x17a,,,,,,,,,,,,,,
-KEY_VCR,0x17b,,,,,,,,,,,,,,
-KEY_VCR2,0x17c,,,,,,,,,,,,,,
-KEY_SAT,0x17d,,,,,,,,,,,,,,
-KEY_SAT2,0x17e,,,,,,,,,,,,,,
-KEY_CD,0x17f,,,,,,,,,,,,,,
-KEY_TAPE,0x180,,,,,,,,,,,,,,
-KEY_RADIO,0x181,,,,,,,,,,,,,,
-KEY_TUNER,0x182,,,,,,,,,,,,,,
-KEY_PLAYER,0x183,,,,,,,,,,,,,,
-KEY_TEXT,0x184,,,,,,,,,,,,,,
-KEY_DVD,0x185,,,,,,,,,,,,,,
-KEY_AUX,0x186,,,,,,,,,,,,,,
-KEY_MP3,0x187,,,,,,,,,,,,,,
-KEY_AUDIO,0x188,,,,,,,,,,,,,,
-KEY_VIDEO,0x189,,,,,,,,,,,,,,
-KEY_DIRECTORY,0x18a,,,,,,,,,,,,,,
-KEY_LIST,0x18b,,,,,,,,,,,,,,
-KEY_MEMO,0x18c,,,,,,,,,,,,,,
-KEY_CALENDAR,0x18d,,,,,,,,,,,,,,
-KEY_RED,0x18e,,,,,,,,,,,,,,
-KEY_GREEN,0x18f,,,,,,,,,,,,,,
-KEY_YELLOW,0x190,,,,,,,,,,,,,,
-KEY_BLUE,0x191,,,,,,,,,,,,,,
-KEY_CHANNELUP,0x192,,,,,,,,,,,,,,
-KEY_CHANNELDOWN,0x193,,,,,,,,,,,,,,
-KEY_FIRST,0x194,,,,,,,,,,,,,,
-KEY_LAST,0x195,,,,,,,,,,,,,,
-KEY_AB,0x196,,,,,,,,,,,,,,
-KEY_NEXT,0x197,,,,,,,,,,,,,,
-KEY_RESTART,0x198,,,,,,,,,,,,,,
-KEY_SLOW,0x199,,,,,,,,,,,,,,
-KEY_SHUFFLE,0x19a,,,,,,,,,,,,,,
-KEY_BREAK,0x19b,,,,,,,,,,,,,,
-KEY_PREVIOUS,0x19c,,,,,,,,,,,,,,
-KEY_DIGITS,0x19d,,,,,,,,,,,,,,
-KEY_TEEN,0x19e,,,,,,,,,,,,,,
-KEY_TWEN,0x19f,,,,,,,,,,,,,,
-KEY_VIDEOPHONE,0x1a0,,,,,,,,,,,,,,
-KEY_GAMES,0x1a1,,,,,,,,,,,,,,
-KEY_ZOOMIN,0x1a2,,,,,,,,,,,,,,
-KEY_ZOOMOUT,0x1a3,,,,,,,,,,,,,,
-KEY_ZOOMRESET,0x1a4,,,,,,,,,,,,,,
-KEY_WORDPROCESSOR,0x1a5,,,,,,,,,,,,,,
-KEY_EDITOR,0x1a6,,,,,,,,,,,,,,
-KEY_SPREADSHEET,0x1a7,,,,,,,,,,,,,,
-KEY_GRAPHICSEDITOR,0x1a8,,,,,,,,,,,,,,
-KEY_PRESENTATION,0x1a9,,,,,,,,,,,,,,
-KEY_DATABASE,0x1aa,,,,,,,,,,,,,,
-KEY_NEWS,0x1ab,,,,,,,,,,,,,,
-KEY_VOICEMAIL,0x1ac,,,,,,,,,,,,,,
-KEY_ADDRESSBOOK,0x1ad,,,,,,,,,,,,,,
-KEY_MESSENGER,0x1ae,,,,,,,,,,,,,,
-KEY_DISPLAYTOGGLE,0x1af,,,,,,,,,,,,,,
-KEY_SPELLCHECK,0x1b0,,,,,,,,,,,,,,
-KEY_LOGOFF,0x1b1,,,,,,,,,,,,,,
-KEY_DOLLAR,0x1b2,,,,,,,,,,,,,,
-KEY_EURO,0x1b3,,,,,,,,,,,,,,
-KEY_FRAMEBACK,0x1b4,,,,,,,,,,,,,,
-KEY_FRAMEFORWARD,0x1b5,,,,,,,,,,,,,,
-KEY_CONTEXT_MENU,0x1b6,,,,,,,,,,,,,,
-KEY_MEDIA_REPEAT,0x1b7,,,,,,,,,,,,,,
-KEY_DEL_EOL,0x1c0,,,,,,,,,,,,,,
-KEY_DEL_EOS,0x1c1,,,,,,,,,,,,,,
-KEY_INS_LINE,0x1c2,,,,,,,,,,,,,,
-KEY_DEL_LINE,0x1c3,,,,,,,,,,,,,,
-KEY_FN,0x1d0,,,,,,,,,,,,,,
-KEY_FN_ESC,0x1d1,,,,,,,,,,,,,,
-KEY_FN_F1,0x1d2,,,,,,,,,,,,,,
-KEY_FN_F2,0x1d3,,,,,,,,,,,,,,
-KEY_FN_F3,0x1d4,,,,,,,,,,,,,,
-KEY_FN_F4,0x1d5,,,,,,,,,,,,,,
-KEY_FN_F5,0x1d6,,,,,,,,,,,,,,
-KEY_FN_F6,0x1d7,,,,,,,,,,,,,,
-KEY_FN_F7,0x1d8,,,,,,,,,,,,,,
-KEY_FN_F8,0x1d9,,,,,,,,,,,,,,
-KEY_FN_F9,0x1da,,,,,,,,,,,,,,
-KEY_FN_F10,0x1db,,,,,,,,,,,,,,
-KEY_FN_F11,0x1dc,,,,,,,,,,,,,,
-KEY_FN_F12,0x1dd,,,,,,,,,,,,,,
-KEY_FN_1,0x1de,,,,,,,,,,,,,,
-KEY_FN_2,0x1df,,,,,,,,,,,,,,
-KEY_FN_D,0x1e0,,,,,,,,,,,,,,
-KEY_FN_E,0x1e1,,,,,,,,,,,,,,
-KEY_FN_F,0x1e2,,,,,,,,,,,,,,
-KEY_FN_S,0x1e3,,,,,,,,,,,,,,
-KEY_FN_B,0x1e4,,,,,,,,,,,,,,
-KEY_BRL_DOT1,0x1f1,,,,,,,,,,,,,,
-KEY_BRL_DOT2,0x1f2,,,,,,,,,,,,,,
-KEY_BRL_DOT3,0x1f3,,,,,,,,,,,,,,
-KEY_BRL_DOT4,0x1f4,,,,,,,,,,,,,,
-KEY_BRL_DOT5,0x1f5,,,,,,,,,,,,,,
-KEY_BRL_DOT6,0x1f6,,,,,,,,,,,,,,
-KEY_BRL_DOT7,0x1f7,,,,,,,,,,,,,,
-KEY_BRL_DOT8,0x1f8,,,,,,,,,,,,,,
-KEY_BRL_DOT9,0x1f9,,,,,,,,,,,,,,
-KEY_BRL_DOT10,0x1fa,,,,,,,,,,,,,,
-KEY_NUMERIC_0,0x200,,,,,,,,,,,,,,
-KEY_NUMERIC_1,0x201,,,,,,,,,,,,,,
-KEY_NUMERIC_2,0x202,,,,,,,,,,,,,,
-KEY_NUMERIC_3,0x203,,,,,,,,,,,,,,
-KEY_NUMERIC_4,0x204,,,,,,,,,,,,,,
-KEY_NUMERIC_5,0x205,,,,,,,,,,,,,,
-KEY_NUMERIC_6,0x206,,,,,,,,,,,,,,
-KEY_NUMERIC_7,0x207,,,,,,,,,,,,,,
-KEY_NUMERIC_8,0x208,,,,,,,,,,,,,,
-KEY_NUMERIC_9,0x209,,,,,,,,,,,,,,
-KEY_NUMERIC_STAR,0x20a,,,,,,,,,,,,,,
-KEY_NUMERIC_POUND,0x20b,,,,,,,,,,,,,,
-KEY_RFKILL,0x20c,,,,,,,,,,,,,,
commit 9c133dcde4be15b05fdfc5fa2e82c85c68ca2f5b
Author: Pavel Grunt <pgrunt at redhat.com>
Date:   Thu Mar 2 14:05:06 2017 +0100

    spicy: Add dialog for precise resizing
    
    It helps when testing whether the guest resizes to requested resolution
    
    Acked-by: Victor Toso <victortoso at redhat.com>

diff --git a/tools/spicy.c b/tools/spicy.c
index ce6b40b..cd1677f 100644
--- a/tools/spicy.c
+++ b/tools/spicy.c
@@ -566,6 +566,61 @@ static void keyboard_grab_cb(GtkWidget *widget, gint grabbed, gpointer data)
     }
 }
 
+static void menu_cb_resize_to(GtkAction *action G_GNUC_UNUSED,
+                              gpointer data)
+{
+    SpiceWindow *win = data;
+    GtkWidget *dialog;
+    GtkWidget *spin_width, *spin_height, *spin_x, *spin_y;
+    GtkGrid *grid;
+    gint width, height;
+    dialog = gtk_dialog_new_with_buttons("Resize guest to",
+                                         GTK_WINDOW(win->toplevel),
+                                         GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         "_Apply",
+                                         GTK_RESPONSE_APPLY,
+                                         "_Cancel",
+                                         GTK_RESPONSE_CANCEL,
+                                         NULL);
+
+    spin_width = gtk_spin_button_new_with_range(0, G_MAXINT, 10);
+    spin_height = gtk_spin_button_new_with_range(0, G_MAXINT, 10);
+    spin_x = gtk_spin_button_new_with_range(0, G_MAXINT, 10);
+    spin_y = gtk_spin_button_new_with_range(0, G_MAXINT, 10);
+
+    gtk_widget_get_preferred_width(win->spice, NULL, &width);
+    gtk_widget_get_preferred_height(win->spice, NULL, &height);
+
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_width), width);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_height), height);
+
+    grid = GTK_GRID(gtk_grid_new());
+    gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
+                      GTK_WIDGET(grid));
+    gtk_grid_attach(grid, gtk_label_new("Resize the guest display:"), 0, 0, 2, 1);
+    gtk_grid_attach(grid, gtk_label_new("width:"), 0, 2, 1, 1);
+    gtk_grid_attach(grid, spin_width, 1, 2, 1, 1);
+    gtk_grid_attach(grid, gtk_label_new("height:"), 0, 3, 1, 1);
+    gtk_grid_attach(grid, spin_height, 1, 3, 1, 1);
+    gtk_grid_attach(grid, gtk_label_new("x:"), 0, 4, 1, 1);
+    gtk_grid_attach(grid, spin_x, 1, 4, 1, 1);
+    gtk_grid_attach(grid, gtk_label_new("y:"), 0, 5, 1, 1);
+    gtk_grid_attach(grid, spin_y, 1, 5, 1, 1);
+
+    gtk_widget_show_all(dialog);
+    if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_APPLY) {
+        spice_main_update_display_enabled(win->conn->main, win->id + win->monitor_id, TRUE, FALSE);
+        spice_main_set_display(win->conn->main,
+                               win->id + win->monitor_id,
+                               gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_x)),
+                               gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_y)),
+                               gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_width)),
+                               gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin_height)));
+        spice_main_send_monitor_config(win->conn->main);
+    }
+    gtk_widget_destroy(dialog);
+}
+
 static void restore_configuration(SpiceWindow *win)
 {
     gboolean state;
@@ -692,6 +747,11 @@ static const GtkActionEntry entries[] = {
         .callback    = G_CALLBACK(menu_cb_fullscreen),
         .accelerator = "<shift>F11",
     },{
+        .name        = "ResizeTo",
+        .label       = "_Resize to",
+        .callback    = G_CALLBACK(menu_cb_resize_to),
+        .accelerator = "",
+    },{
 #ifdef USE_SMARTCARD
 	.name        = "InsertSmartcard",
 	.label       = "_Insert Smartcard",
@@ -905,6 +965,9 @@ static char ui_xml[] =
 "    <toolitem action='PasteFromGuest'/>\n"
 "    <separator/>\n"
 "    <toolitem action='Fullscreen'/>\n"
+"    <separator/>\n"
+"    <toolitem action='ResizeTo'/>\n"
+"    <separator/>\n"
 "  </toolbar>\n"
 "</ui>\n";
 


More information about the Spice-commits mailing list