From e92316ad3074aaf13bced21f03c98969ca6f73a9 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 27 Jul 2017 18:46:40 +0100 Subject: [PATCH 1/3] ui: correctly detect spice PAUSE scancode sequence The SPICE input code is currently detcting 0xe1 0x1d 0x45 as the PAUSE key make sequence and 0xe1 0x9d 0xc5 as the break sequence. This is incorrect, because all 6 scancodes together are the make sequence, and there is no break sequence. Signed-off-by: Daniel P. Berrange Message-id: 20170727174640.30359-1-berrange@redhat.com Signed-off-by: Gerd Hoffmann --- ui/spice-input.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/ui/spice-input.c b/ui/spice-input.c index cda9976469..3d41aa1831 100644 --- a/ui/spice-input.c +++ b/ui/spice-input.c @@ -50,6 +50,7 @@ static const SpiceKbdInterface kbd_interface = { static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode) { + static const uint8_t pauseseq[] = { 0xe1, 0x1d, 0x45, 0xe1, 0x9d, 0xc5 }; QemuSpiceKbd *kbd = container_of(sin, QemuSpiceKbd, sin); int keycode; bool up; @@ -58,6 +59,18 @@ static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode) kbd->emul0 = true; return; } + + if (scancode == pauseseq[kbd->pauseseq]) { + kbd->pauseseq++; + if (kbd->pauseseq == G_N_ELEMENTS(pauseseq)) { + qemu_input_event_send_key_qcode(NULL, Q_KEY_CODE_PAUSE, true); + kbd->pauseseq = 0; + } + return; + } else { + kbd->pauseseq = 0; + } + keycode = scancode & ~SCANCODE_UP; up = scancode & SCANCODE_UP; if (kbd->emul0) { @@ -65,25 +78,6 @@ static void kbd_push_key(SpiceKbdInstance *sin, uint8_t scancode) keycode |= SCANCODE_GREY; } - if (scancode == SCANCODE_EMUL1) { - kbd->pauseseq++; - return; - } else if (kbd->pauseseq == 1) { - if (keycode == 0x1d) { - kbd->pauseseq++; - return; - } else { - kbd->pauseseq = 0; - } - } else if (kbd->pauseseq == 2) { - if (keycode == 0x45) { - qemu_input_event_send_key_qcode(NULL, Q_KEY_CODE_PAUSE, !up); - kbd->pauseseq = 0; - return; - } - kbd->pauseseq = 0; - } - qemu_input_event_send_key_number(NULL, keycode, !up); } From 103dce8f750f4b990dbd24ac231392062c153ec0 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 28 Jul 2017 08:34:15 +0200 Subject: [PATCH 2/3] ui: drop ac_search and ac_stop Both keys exist already: "ac_search" is "find" and "ac_stop" is "stop". Fixes: 37810e80553c19f0dac3644924895a9bf5c70785 Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Message-id: 20170728063415.27480-1-kraxel@redhat.com --- hw/input/ps2.c | 8 ++++---- qapi-schema.json | 5 +---- ui/input-keymap.c | 8 ++++---- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 9f057e46ea..77906d5f46 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -239,11 +239,11 @@ static const uint16_t qcode_to_keycode_set1[Q_KEY_CODE__MAX] = { [Q_KEY_CODE_MAIL] = 0xe06c, [Q_KEY_CODE_CALCULATOR] = 0xe021, [Q_KEY_CODE_COMPUTER] = 0xe06b, - [Q_KEY_CODE_AC_SEARCH] = 0xe065, + [Q_KEY_CODE_FIND] = 0xe065, [Q_KEY_CODE_AC_HOME] = 0xe032, [Q_KEY_CODE_AC_BACK] = 0xe06a, [Q_KEY_CODE_AC_FORWARD] = 0xe069, - [Q_KEY_CODE_AC_STOP] = 0xe068, + [Q_KEY_CODE_STOP] = 0xe068, [Q_KEY_CODE_AC_REFRESH] = 0xe067, [Q_KEY_CODE_AC_BOOKMARKS] = 0xe066, @@ -379,11 +379,11 @@ static const uint16_t qcode_to_keycode_set2[Q_KEY_CODE__MAX] = { [Q_KEY_CODE_MAIL] = 0xe048, [Q_KEY_CODE_CALCULATOR] = 0xe02b, [Q_KEY_CODE_COMPUTER] = 0xe040, - [Q_KEY_CODE_AC_SEARCH] = 0xe010, + [Q_KEY_CODE_FIND] = 0xe010, [Q_KEY_CODE_AC_HOME] = 0xe03a, [Q_KEY_CODE_AC_BACK] = 0xe038, [Q_KEY_CODE_AC_FORWARD] = 0xe030, - [Q_KEY_CODE_AC_STOP] = 0xe028, + [Q_KEY_CODE_STOP] = 0xe028, [Q_KEY_CODE_AC_REFRESH] = 0xe020, [Q_KEY_CODE_AC_BOOKMARKS] = 0xe018, diff --git a/qapi-schema.json b/qapi-schema.json index dcc12c83a9..c96f0a26f6 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -4856,11 +4856,9 @@ # @mail: since 2.10 # @calculator: since 2.10 # @computer: since 2.10 -# @ac_search: since 2.10 # @ac_home: since 2.10 # @ac_back: since 2.10 # @ac_forward: since 2.10 -# @ac_stop: since 2.10 # @ac_refresh: since 2.10 # @ac_bookmarks: since 2.10 # altgr, altgr_r: dropped in 2.10 @@ -4890,8 +4888,7 @@ 'audionext', 'audioprev', 'audiostop', 'audioplay', 'audiomute', 'volumeup', 'volumedown', 'mediaselect', 'mail', 'calculator', 'computer', - 'ac_search', 'ac_home', 'ac_back', 'ac_forward', 'ac_stop', - 'ac_refresh', 'ac_bookmarks' ] } + 'ac_home', 'ac_back', 'ac_forward', 'ac_refresh', 'ac_bookmarks' ] } ## # @KeyValue: diff --git a/ui/input-keymap.c b/ui/input-keymap.c index 0d9ddde9c9..cdad5652d3 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -123,13 +123,13 @@ static int linux_to_qcode[KEY_CNT] = { [KEY_MAIL] = Q_KEY_CODE_MAIL, [KEY_COMPUTER] = Q_KEY_CODE_COMPUTER, - [KEY_STOP] = Q_KEY_CODE_AC_STOP, + [KEY_STOP] = Q_KEY_CODE_STOP, [KEY_BOOKMARKS] = Q_KEY_CODE_AC_BOOKMARKS, [KEY_BACK] = Q_KEY_CODE_AC_BACK, [KEY_FORWARD] = Q_KEY_CODE_AC_FORWARD, [KEY_HOMEPAGE] = Q_KEY_CODE_AC_HOME, [KEY_REFRESH] = Q_KEY_CODE_AC_REFRESH, - [KEY_FIND] = Q_KEY_CODE_AC_SEARCH, + [KEY_FIND] = Q_KEY_CODE_FIND, [KEY_NEXTSONG] = Q_KEY_CODE_AUDIONEXT, [KEY_PREVIOUSSONG] = Q_KEY_CODE_AUDIOPREV, @@ -279,13 +279,13 @@ static const int qcode_to_number[] = { [Q_KEY_CODE_MAIL] = 0xec, [Q_KEY_CODE_COMPUTER] = 0xeb, - [Q_KEY_CODE_AC_STOP] = 0xe8, + [Q_KEY_CODE_STOP] = 0xe8, [Q_KEY_CODE_AC_BOOKMARKS] = 0xe6, [Q_KEY_CODE_AC_BACK] = 0xea, [Q_KEY_CODE_AC_FORWARD] = 0xe9, [Q_KEY_CODE_AC_HOME] = 0xb2, [Q_KEY_CODE_AC_REFRESH] = 0xe7, - [Q_KEY_CODE_AC_SEARCH] = 0xe5, + [Q_KEY_CODE_FIND] = 0xe5, [Q_KEY_CODE_AUDIONEXT] = 0x99, [Q_KEY_CODE_AUDIOPREV] = 0x90, From ef58430d5daeac4c18e4072f5860e25700aa8af6 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 28 Jul 2017 08:34:32 +0200 Subject: [PATCH 3/3] ui: add pause key to linux_to_qcode Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Message-id: 20170728063432.27578-1-kraxel@redhat.com --- ui/input-keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/input-keymap.c b/ui/input-keymap.c index cdad5652d3..cf979c2ce9 100644 --- a/ui/input-keymap.c +++ b/ui/input-keymap.c @@ -116,6 +116,7 @@ static int linux_to_qcode[KEY_CNT] = { [KEY_LEFTMETA] = Q_KEY_CODE_META_L, [KEY_RIGHTMETA] = Q_KEY_CODE_META_R, [KEY_MENU] = Q_KEY_CODE_MENU, + [KEY_PAUSE] = Q_KEY_CODE_PAUSE, [KEY_SLEEP] = Q_KEY_CODE_SLEEP, [KEY_WAKEUP] = Q_KEY_CODE_WAKE,