|
|
c401cc |
From bd1fffc449203a9a20de243d97dedde8f34cb951 Mon Sep 17 00:00:00 2001
|
|
|
c401cc |
Message-Id: <bd1fffc449203a9a20de243d97dedde8f34cb951.1389183249.git.jdenemar@redhat.com>
|
|
|
c401cc |
From: Michal Privoznik <mprivozn@redhat.com>
|
|
|
c401cc |
Date: Mon, 6 Jan 2014 17:09:30 +0100
|
|
|
c401cc |
Subject: [PATCH] virkeycode: Allow ANSI_A
|
|
|
c401cc |
|
|
|
c401cc |
https://bugzilla.redhat.com/show_bug.cgi?id=1044806
|
|
|
c401cc |
|
|
|
c401cc |
Currently, sending the ANSI_A keycode from os_x codepage doesn't work as
|
|
|
c401cc |
it has a special value of 0x0. Our internal code handles that no
|
|
|
c401cc |
different to other not defined keycodes. Hence, in order to allow it we
|
|
|
c401cc |
must change all the undefined keycodes from 0 to -1 and adapt some code
|
|
|
c401cc |
too.
|
|
|
c401cc |
|
|
|
c401cc |
# virsh send-key guestname --codeset os_x ANSI_A
|
|
|
c401cc |
error: invalid keycode: 'ANSI_A'
|
|
|
c401cc |
|
|
|
c401cc |
# virsh send-key guestname --codeset os_x ANSI_B
|
|
|
c401cc |
# virsh send-key guestname --codeset os_x ANSI_C
|
|
|
c401cc |
|
|
|
c401cc |
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
|
c401cc |
(cherry picked from commit 72ffbd1bf3005907c604d94c13058c9e547d46e8)
|
|
|
c401cc |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
c401cc |
---
|
|
|
c401cc |
src/util/virkeycode-mapgen.py | 4 ++--
|
|
|
c401cc |
src/util/virkeycode.c | 4 ++--
|
|
|
c401cc |
tools/virsh-domain.c | 6 +++---
|
|
|
c401cc |
3 files changed, 7 insertions(+), 7 deletions(-)
|
|
|
c401cc |
|
|
|
c401cc |
diff --git a/src/util/virkeycode-mapgen.py b/src/util/virkeycode-mapgen.py
|
|
|
c401cc |
index 22b21b4..8360bfe 100755
|
|
|
c401cc |
--- a/src/util/virkeycode-mapgen.py
|
|
|
c401cc |
+++ b/src/util/virkeycode-mapgen.py
|
|
|
c401cc |
@@ -86,12 +86,12 @@ for i in range(len(cols)):
|
|
|
c401cc |
if isname:
|
|
|
c401cc |
print "const char *virKeymapNames_" + name + "[] = {"
|
|
|
c401cc |
else:
|
|
|
c401cc |
- print "unsigned short virKeymapValues_" + name + "[] = {"
|
|
|
c401cc |
+ print "int virKeymapValues_" + name + "[] = {"
|
|
|
c401cc |
|
|
|
c401cc |
for entry in keycodes:
|
|
|
c401cc |
if isname:
|
|
|
c401cc |
print " " + quotestring(entry[i] or "NULL") + ","
|
|
|
c401cc |
else:
|
|
|
c401cc |
- print " " + (entry[i] or "0") + ","
|
|
|
c401cc |
+ print " " + (entry[i] or "-1") + ","
|
|
|
c401cc |
|
|
|
c401cc |
print "};\n"
|
|
|
c401cc |
diff --git a/src/util/virkeycode.c b/src/util/virkeycode.c
|
|
|
c401cc |
index 50594d6..7880a0a 100644
|
|
|
c401cc |
--- a/src/util/virkeycode.c
|
|
|
c401cc |
+++ b/src/util/virkeycode.c
|
|
|
c401cc |
@@ -50,7 +50,7 @@ static const char **virKeymapNames[] = {
|
|
|
c401cc |
};
|
|
|
c401cc |
verify(ARRAY_CARDINALITY(virKeymapNames) == VIR_KEYCODE_SET_LAST);
|
|
|
c401cc |
|
|
|
c401cc |
-static unsigned short *virKeymapValues[] = {
|
|
|
c401cc |
+static int *virKeymapValues[] = {
|
|
|
c401cc |
[VIR_KEYCODE_SET_LINUX] =
|
|
|
c401cc |
virKeymapValues_linux,
|
|
|
c401cc |
[VIR_KEYCODE_SET_XT] =
|
|
|
c401cc |
@@ -113,7 +113,7 @@ int virKeycodeValueTranslate(virKeycodeSet from_codeset,
|
|
|
c401cc |
{
|
|
|
c401cc |
size_t i;
|
|
|
c401cc |
|
|
|
c401cc |
- if (key_value <= 0)
|
|
|
c401cc |
+ if (key_value < 0)
|
|
|
c401cc |
return -1;
|
|
|
c401cc |
|
|
|
c401cc |
|
|
|
c401cc |
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
|
|
|
c401cc |
index 9afe44a..3895f39 100644
|
|
|
c401cc |
--- a/tools/virsh-domain.c
|
|
|
c401cc |
+++ b/tools/virsh-domain.c
|
|
|
c401cc |
@@ -6884,7 +6884,7 @@ vshKeyCodeGetInt(const char *key_name)
|
|
|
c401cc |
{
|
|
|
c401cc |
unsigned int val;
|
|
|
c401cc |
|
|
|
c401cc |
- if (virStrToLong_ui(key_name, NULL, 0, &val) < 0 || val > 0xffff || !val)
|
|
|
c401cc |
+ if (virStrToLong_ui(key_name, NULL, 0, &val) < 0 || val > 0xffff)
|
|
|
c401cc |
return -1;
|
|
|
c401cc |
return val;
|
|
|
c401cc |
}
|
|
|
c401cc |
@@ -6925,8 +6925,8 @@ cmdSendKey(vshControl *ctl, const vshCmd *cmd)
|
|
|
c401cc |
goto cleanup;
|
|
|
c401cc |
}
|
|
|
c401cc |
|
|
|
c401cc |
- if ((keycode = vshKeyCodeGetInt(opt->data)) <= 0) {
|
|
|
c401cc |
- if ((keycode = virKeycodeValueFromString(codeset, opt->data)) <= 0) {
|
|
|
c401cc |
+ if ((keycode = vshKeyCodeGetInt(opt->data)) < 0) {
|
|
|
c401cc |
+ if ((keycode = virKeycodeValueFromString(codeset, opt->data)) < 0) {
|
|
|
c401cc |
vshError(ctl, _("invalid keycode: '%s'"), opt->data);
|
|
|
c401cc |
goto cleanup;
|
|
|
c401cc |
}
|
|
|
c401cc |
--
|
|
|
c401cc |
1.8.5.2
|
|
|
c401cc |
|